以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
+ _+ Z, i; j1 i4 c) T一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
1 k( o5 Q2 \; @: p& m; x' x2 Y( \# F3 |worker_processes 8;; q' w3 b) B2 ]- w/ G
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
* I- J- `& f& Y4 s. gworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
# G3 f/ V' \8 m' Q為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
0 m. }1 B- L' _9 ^$ L, }worker_rlimit_nofile 102400;
+ Y+ V# @- j0 C+ d這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數: J% r. s$ L) G" _( U Y* H' J6 N
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
$ a4 F; Y- T4 S9 ?) F5 G9 ^$ {# duse epoll;
8 @. _& o9 d2 m. h% ], O$ v% F使用 epoll 的 I/O 模型,這個不用說了吧。
8 G+ l, J6 y3 E! jworker_connections 102400;
]5 J3 f, g" }$ A& j6 r每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。
) t0 T" y3 l+ G4 k( V) Ekeepalive_timeout 60;
- H6 R- h7 r0 I U/ [keepalive 超時時間。1 I6 G t1 Y5 j: R+ i% [; B) e4 F( l8 q7 z
client_header_buffer_size 4k;
" u0 d" p6 y; A) m8 k& Z2 O: {客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由7 r! c; T2 ] I
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
- Z4 v( c2 J) r- Y& O `open_file_cache max=102400 inactive=20s;
0 E8 A. }$ C* W/ \, K) d( S+ u+ v這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時" [! e/ g, q! v6 s, k5 `
間文件沒被請求後刪除緩存。
8 m. |' i* ?0 iopen_file_cache_valid 30s;1 [& A% E4 T' \
這個是指多長時間檢查一次緩存的有效信息。+ m8 I+ F/ o: B
open_file_cache_min_uses 1;
+ J; S9 [2 y6 A+ m' Uopen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打
% V! R, [, e# A/ \3 H0 J開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
' I9 v4 k+ n8 w0 _0 l0 [4 [" _$ F
& H; v5 C+ T `# f- x4 {* x' d% t3 M ^/ T; N; Z; V/ J, |+ ~ A
關於內核參數的優化:9 X& e( m5 X" `& t+ I" B
net.ipv4.tcp_max_tw_buckets = 60006 w& ~# i, f- {8 h9 M
timewait 的數量,默認是 180000。2 T X5 G6 S# j: ?
net.ipv4.ip_local_port_range = 1024 65000
: ^$ q5 h; |1 h8 s2 H允許系統打開的端口範圍。
7 i9 G! |% G# W+ N! x$ w1 Wnet.ipv4.tcp_tw_recycle = 1
# s/ {% A1 O% ^3 P U% _( b" t1 Z" G( `啟用 timewait 快速回收。
/ [0 G/ r, }: t2 l& }; Hnet.ipv4.tcp_tw_reuse = 1
* m. y* k$ v' e! ~4 y0 x; `開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。! U e |! d7 _3 N4 X" j
net.ipv4.tcp_syncookies = 1
( S# U; i3 J- x. V開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。 n# c- m3 y/ z
net.core.somaxconn = 2621448 O( [- L3 D$ |- _' D& E- x2 e6 G
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
( j3 e7 _) H' U; ?: L% w8 x4 dNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
6 I7 i1 |: k1 _5 vnet.core.netdev_max_backlog = 262144
6 d) f( g7 [ W& R每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。6 W8 E% ?: T2 d- P& e/ y: M6 a
net.ipv4.tcp_max_orphans = 262144
1 ?# r+ G; v# \( ]1 Y. v系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
' b' ]/ Y' ?9 |印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值! i% D' `4 F5 f5 T9 k
(如果增加了內存之後)。
6 K; }+ ~5 G* B! S. snet.ipv4.tcp_max_syn_backlog = 262144
9 H- Z% c: K$ r! ] L記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
5 R6 ]5 U6 f7 ~3 B! }! {6 K* ?* j統則是 128。
5 [9 y R& }9 W2 Onet.ipv4.tcp_timestamps = 0
3 D/ Q/ G% I0 t: d. h% Z9 t3 j時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的4 ?5 C4 S- o7 C2 @9 ?
數據包。這裡需要將其關掉。
9 H$ D6 x4 H: r: o% Z* W' t$ r. `net.ipv4.tcp_synack_retries = 1" v+ l2 M- i/ A7 O' r. U" H
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次5 ^% r. U; ^3 d7 v! z0 f0 D
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。5 o' \ t$ K& U/ N3 Y. `
net.ipv4.tcp_syn_retries = 14 `: V# {/ v* r% e0 k2 \
在內核放棄建立連接之前發送 SYN 包的數量。
- |1 f, Y1 O4 m+ s( Enet.ipv4.tcp_fin_timeout = 1
4 B. n$ n) H4 ^7 ^如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚. v( p- U& q$ S9 b8 y
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕& c; _. g( f: {% w1 U
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最9 V, f' w5 c% X! z5 p e; Q; L; @
多只能吃掉 1.5K 內存,但是它們的生存期長些。
) V/ T' A' U1 J; V; Vnet.ipv4.tcp_keepalive_time = 30
0 X* ^$ M5 [% w當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
7 I; ?6 G5 ]* w5 W8 I% V" s2 K, ~/ @! K0 Y9 e5 z7 @9 ^2 D3 w0 K: P
+ G8 _( c" v% B2 [" R" _9 k, ?4 K下面貼一個完整的內核優化設置:
/ |( ]5 H. t0 M" D: E/ znet.ipv4.ip_forward = 01 V8 s. _" O* m" R2 e
net.ipv4.conf.default.rp_filter = 1
# f. a q& H, A3 V' }net.ipv4.conf.default.accept_source_route = 0
6 u8 j* L) f" p- x$ H" M+ Nkernel.sysrq = 0
& m! l+ C0 i4 T: J& bkernel.core_uses_pid = 1 p& f/ ]" E; {! ]$ S
net.ipv4.tcp_syncookies = 17 S8 S% E" Q- b9 ]7 R% E$ s
kernel.msgmnb = 65536/ b6 c; c, b8 K( @+ K. y# @8 T y: ?
kernel.msgmax = 65536
3 G8 ~6 z* Q( Hkernel.shmmax = 68719476736
' z' z) A2 i" n1 k2 t5 Nkernel.shmall = 42949672962 W0 m& i6 c' X0 ^) ]& A- w
net.ipv4.tcp_max_tw_buckets = 60005 t7 V. _( M" P+ B7 A% x
net.ipv4.tcp_sack = 1
4 S: U6 R: p8 v* F3 Pnet.ipv4.tcp_window_scaling = 1
0 T6 Y9 h$ [: ^net.ipv4.tcp_rmem = 4096 87380 4194304
& ~3 _. l. S" n! h. j8 U6 X' Cnet.ipv4.tcp_wmem = 4096 16384 4194304
. w; L' j: F) k1 n, V2 [$ X& y' \net.core.wmem_default = 83886087 N0 s/ u( r4 i: g: F6 D
net.core.rmem_default = 83886084 T- g: S" D1 }% o
net.core.rmem_max = 16777216
( D1 L4 O0 Z& _ fnet.core.wmem_max = 16777216
" Z' B+ v5 _( Y! R* g4 x* T/ hnet.core.netdev_max_backlog = 262144
6 T1 @2 n* J `! [! A9 t2 U; wnet.core.somaxconn = 262144# [: x" S$ F* o
net.ipv4.tcp_max_orphans = 3276800
; ^) Y- { H9 w( e: q' z( {8 }net.ipv4.tcp_max_syn_backlog = 262144
, L) w; l+ m3 c, R: c! J$ P& mnet.ipv4.tcp_timestamps = 0
4 I, v" P# D* v6 j" b1 Q( ^% s* Qnet.ipv4.tcp_synack_retries = 1' K0 W& u' `) J% a# [6 c
net.ipv4.tcp_syn_retries = 1) S, W# a4 y6 I- ?& H% E4 b: D
net.ipv4.tcp_tw_recycle = 1& g% V: r5 |: B2 ^1 @
net.ipv4.tcp_tw_reuse = 1+ F8 Z: g7 X# n. j+ {5 p' H, D0 _; A
net.ipv4.tcp_mem = 94500000 915000000 927000000
( s! A/ I0 L3 N# m" Z" p' Z* wnet.ipv4.tcp_fin_timeout = 1$ O& f9 ?4 q/ U7 Q- R
net.ipv4.tcp_keepalive_time = 30
7 c/ {+ d* N8 h1 p1 o5 Fnet.ipv4.ip_local_port_range = 1024 65000" y% r$ N6 t. b5 h* Q+ C6 ^
3 m) p0 m, n! A5 g/ _1 D
& K. K/ y! [# q! z N
下面是一個簡單的 nginx 配置文件:nginx.conf
1 O) ?# L1 l+ ?user www www;
' S0 N+ |3 R4 ]6 w$ Y+ Lworker_processes 8;+ n; n4 B9 S' k* _( K
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
6 D- s7 `# D* h( zerror_log /www/log/nginx_error.log crit;/ e, Q5 B+ s9 O% W
pid /usr/local/nginx/nginx.pid;/ q4 T8 Q8 I5 x3 h
worker_rlimit_nofile 204800; i0 E+ a4 ?& D7 v
events" J. u5 F, ~) l: l8 c& I) {
{. C* [( ^% w0 a- ~$ \$ Z' a
use epoll;
$ _2 j) Y% E0 P6 _4 U worker_connections 204800;& {; t9 y! J" k+ [: @
}
7 R! D3 @( | j+ Chttp! D- n+ t$ y: { m3 p
{8 D' ?, ]) e+ f* C% B' i5 T: ?6 Q
include mime.types;% C+ B8 Q) \9 ~: R( \0 U
default_type application/octet-stream;
4 C5 ]5 E' Z8 ~# z- k h, O- M charset utf-8;% b6 w9 g. Y! f7 O6 p, i+ B6 b
server_names_hash_bucket_size 128;8 i$ A0 z3 T5 N( h9 H
client_header_buffer_size 2k;8 u% h9 c: X$ T* b J7 Q; w
large_client_header_buffers 4 4k;) r1 l: G. \3 G0 z& a6 F/ g
client_max_body_size 8m;
6 G9 d8 t. S" W sendfile on;& z% @: {+ y" {8 f/ H6 r, [. N
tcp_nopush on;
) }) Y7 D* e" m& z# U8 Y5 M4 N+ r keepalive_timeout 60;' H% Z* N6 v, K$ d6 M2 g
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;- h/ W; }0 m4 {* x2 [
fastcgi_connect_timeout 300;' |1 d! A. t4 f5 p0 {, I
fastcgi_send_timeout 300;
9 l% | x1 v r0 o$ o0 D& U fastcgi_read_timeout 300;4 P W* v0 T3 p' g; [4 w# @# m
fastcgi_buffer_size 16k;
8 F) W7 J/ V7 I: R U; E3 i4 R fastcgi_buffers 16 16k;
! G$ L7 @1 ^1 T& ?$ S* P% o6 u6 `6 | fastcgi_busy_buffers_size 16k;+ [; d" S% y8 j" x# ]9 r
fastcgi_temp_file_write_size 16k;3 {6 [& y2 G- Q; X8 N: y( a
fastcgi_cache TEST;) |8 B7 |; R4 t' W. c, C, e$ `
fastcgi_cache_valid 200 302 1h;. J G' s& _2 a/ v, m$ r+ K
fastcgi_cache_valid 301 1d;* o0 A* U" \' x- f
fastcgi_cache_valid any 1m;
$ W7 \$ X, m, h: ~ fastcgi_cache_min_uses 1;
& |6 N; |4 d* ?9 C9 ] fastcgi_cache_use_stale error timeout invalid_header http_500;/ M+ F# Z) F# A8 x
open_file_cache max=204800 inactive=20s; _+ u Y; d, E/ F
open_file_cache_min_uses 1;
4 }. k* Z) l9 W3 \5 m. ^2 a+ N open_file_cache_valid 30s;5 f3 A: ~: I& `3 \6 t
tcp_nodelay on;# r% p7 I! ?, {5 F0 r2 ]+ E
gzip on;% r: q9 L0 V% z3 F( s
gzip_min_length 1k;
o7 W8 t3 G& t7 T- V+ R gzip_buffers 4 16k;
; [; i. }, E- K! C* v9 ~ gzip_http_version 1.0;# G C; c* A+ h
gzip_comp_level 2;
+ j& N" }7 X( O" m gzip_types text/plain application/x-javascript text/css application/xml;
. a/ p3 n+ J4 q6 D m gzip_vary on;$ w9 U4 O3 A3 I) @2 l6 _) Q* E
server
# Z+ i" r1 H- ]7 b {
" t! Y4 x& A8 p: z7 F& J% t; H listen 8080;3 I/ ?" m$ m# M
server_name backup.aiju.com;
2 B$ x; X9 W* i7 o0 B index index.php index.htm;/ D& X6 g( J3 C- s: X. g0 c
root /www/html/;
) J- D- `5 r, |) j) {: | location /status8 x7 }- x9 }5 O# X$ ^! b+ m5 U
{
$ |7 q d9 ~- f/ _/ @' L6 |% m stub_status on;
8 A' K; L$ V1 K( W( O J }7 H% c' A# B3 ?* D
location ~ .*\.(php|php5)?$* K, H; i/ N6 f. H; c8 x5 ^/ D
{
& R# f8 ]' I: w fastcgi_pass 127.0.0.1:9000;9 {- l* q( ] G- W
fastcgi_index index.php;
, ~9 ]2 Q, d1 }! l: M include fcgi.conf;
" b6 v7 ~3 I/ Y+ C2 O0 {3 r8 B$ _- p }
1 V, l1 g7 d' c2 \. z0 K location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$8 d1 b+ y* K! h b8 [! i" P- ?
{
# L; [( @5 T4 K0 ` expires 30d;; z+ U. x4 B% y R; E
}
) B% i8 R" t, J3 ]6 q7 r log_format access '$remote_addr - $remote_user [$time_local] "$request" '$ X: [# F8 L/ Z5 ?" c
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
, @$ S T( T; D' v1 F& w access_log /www/log/access.log access;
: f! \5 Y, k" {; a: R* A: l& \ }
6 h$ E$ k2 N1 L# R! s}$ O. k# L( h \8 ?7 \
5 Y @6 l+ U/ d關於 FastCGI 的幾個指令:
" s& H0 K9 V, V6 M' y8 ffastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;/ O/ w, k' A$ k" e9 S+ p9 ]5 _
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
3 D% E: ~) \" j* Lfastcgi_connect_timeout 300;
/ C t# O9 `( o7 {* H指定連接到後端 FastCGI 的超時時間。$ @! w; p3 Q ^( M, P( |
fastcgi_send_timeout 300;
, n$ }# H4 Z1 e& G向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。( Q5 v8 n$ C. f4 P
fastcgi_read_timeout 300;
5 u% }8 G9 \4 F* r) M/ _5 _8 E接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
: h& K& I) l8 ~0 m0 k1 Lfastcgi_buffer_size 16k;
' o1 |: ^0 X& h/ S( n% p; E w) S指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的0 r8 D; G0 O5 H k
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
5 v: ^9 E k2 {/ f5 L7 a1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大2 ] l" s; w/ I, W1 S
小去緩存。
/ h1 ~1 b9 s& f. wfastcgi_buffers 16 16k;. G: i `" {( g+ S7 Z7 x+ J4 W& U
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
7 w# `8 g6 b- n7 U" @0 `$ p) p則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,( u8 }5 ^" q8 I, G4 L* d
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
- Z9 R9 l: W- C+ {% P- H2 y: P, Q站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
2 H; `, [& p U' Y+ I# @置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4- B" I3 Y, X# I
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它3 @$ j0 {, S T
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
) c* ^5 C' j& }+ K0 z& S& D( ufastcgi_busy_buffers_size 32k;
) j" Q; W; a( o/ P這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。% X* U K6 M F u8 X3 Q3 L: |
fastcgi_temp_file_write_size 32k;
" }* Z" t$ r4 Y0 Q; P# ?! C在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。9 p, E$ T- v3 o
fastcgi_cache TEST
( \9 s ]( t$ r% c- Z: f開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。7 B% a' T9 m6 F a0 S( U9 I
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。% g, o9 M8 ]9 H: U
fastcgi_cache_valid 200 302 1h;
) q- H! Q; U) }* `fastcgi_cache_valid 301 1d;
& k4 ^2 ?2 i# j5 ^! x$ j' @fastcgi_cache_valid any 1m;
( E+ O* i- k7 C: T- _" R: m, U+ w為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。' n7 h; C- J# j
fastcgi_cache_min_uses 1;; D& d3 E! @5 ~* h/ E
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被1 B% o2 U8 _) t$ z. h& X
使用,那麼這個文件將被移除。" U. a$ Y% _# a4 B1 i2 t
fastcgi_cache_use_stale error timeout invalid_header http_500;
* I9 x/ S$ S7 ]不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
8 E' x5 A9 `! U; ~# W' y8 n以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理1 ]$ h, B' F& n5 r: G. ]
FastCGI,可以修改配置文件中的以下值:
3 ~" c; |* y( J: p<value name="max_children">60</value># g6 b1 _, p _2 A
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。0 ]5 X9 ?" r. F' c4 ?
<value name="rlimit_files">102400</value>
! [8 [" ^5 |' q5 p: }9 o' E0 C最多打開文件數。0 u7 L. ]7 C, f+ l% Y. q4 t
<value name="max_requests">204800</value># z( }- \6 A! C
每個進程在重置之前能夠執行的最多請求數。1 B# _; P. ~: b6 F! F) n
0 [, l* V# v. M3 O' l0 Y% i+ h, U1 {+ s3 N. ]( R' m
參考資料: ]" B# H2 _7 ]2 V- c7 @
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf9 W$ r) ]1 y+ w. y' H6 j- S2 c b
http://blog.chinaunix.net/u3/105004/showart_2087155.html( z; U7 O0 j `' p% n
http://nginx.179401.cn/
( P/ j+ j! |& s9 o5 ahttp://blog.s135.com/nginx_php_v5/
/ N l6 N, c3 `/ ?# V" ?http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
n+ I) h5 {2 n) ^5 Z9 Whttps://www.netroby.com/view/3128( X- `9 h$ N3 z* E4 e" d5 n( Q! a6 H" m
fastcgi 快取:& F/ e; [, ]1 ?- e" K k
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/9 q- T2 h( s h( ~# q9 U
其他:
( ^9 k6 r% N* R; C6 m; m# [nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout: }" b# l% |5 y" M
nginx優化:http://www.jianshu.com/p/2184654ba4b2
3 R j( |7 W# r+ n1 }$ Ngzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on3 j* x, I/ t6 p& I
2 N" g7 f& E, ?/ p5 U
$ `" Q. l2 [3 _, }. V d
3 F0 p3 @; [0 |5 f; A) U' U' w: l0 y% j5 m7 F0 Y
|
|