tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf* Y+ P, k; j% F; |9 J, X, X2 Y& B/ t
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:+ n% x/ d# P& @: a( s5 N* L+ [; |
worker_processes 8;
" B+ n6 T" N/ T5 e/ G. ~nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
% k. v" w8 h% _6 T3 o$ q: L/ Wworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;' P2 r; s) }/ [) |4 }2 }0 Y" ?8 c3 Q
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
* K+ S! I2 g7 N+ m+ J& z- A9 Pworker_rlimit_nofile 102400;2 M7 Q4 {0 X3 E$ z& t
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數1 B2 ?- o# I2 M6 i+ s: C- N/ r2 I+ }
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
- \' X- g% _( s; N* N2 Luse epoll;- J2 i @5 ~* U& v7 o8 P
使用 epoll 的 I/O 模型,這個不用說了吧。' a/ T b& C0 H" l
worker_connections 102400;
9 t! L+ H: R; v7 D6 O. a& _每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。# Q: Y' B4 [8 y
keepalive_timeout 60;
% C/ `+ {! \2 f! ^6 [keepalive 超時時間。
$ [5 @& H% X% B7 {3 c* m" e( Aclient_header_buffer_size 4k;, [5 h% f4 w% { N! g8 y6 t, r
客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由; ?7 u# ~% `% A6 A$ N3 q9 z5 m
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
8 {4 n; @" `5 J& d G- X- |open_file_cache max=102400 inactive=20s;
3 O* s j: F9 Q T w這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
) }) k: I, ~/ N% s間文件沒被請求後刪除緩存。0 m! D+ ?7 j7 r6 z" }% J
open_file_cache_valid 30s;
/ ?" ^8 @0 A/ A9 Z這個是指多長時間檢查一次緩存的有效信息。: s0 D+ C6 H7 o( X
open_file_cache_min_uses 1;: \. v/ t K) [' o( I
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打2 [& T) w9 U# o2 O9 G. G# e$ t
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。. [9 f t; R" S6 ~( O" N
. H" \* W( _- s
, d- @/ K& A& I# M關於內核參數的優化:: r8 a4 n8 n; e
net.ipv4.tcp_max_tw_buckets = 6000
X4 t6 _) z* [) [7 Mtimewait 的數量,默認是 180000。- Y. g. C& i# r/ e8 `! S$ |1 f0 `
net.ipv4.ip_local_port_range = 1024 650009 ~2 w0 d3 A5 _2 i
允許系統打開的端口範圍。( Z5 b3 T: D6 m5 A4 ]& ?
net.ipv4.tcp_tw_recycle = 1/ k( `# a4 t: N2 I$ |
啟用 timewait 快速回收。
' ^" @- |- h: w# ~+ ?/ s, K* M. Fnet.ipv4.tcp_tw_reuse = 1
. z& c* r) ^. E7 |開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。" ]6 U- h* s& b/ d) R* ]' ^, E
net.ipv4.tcp_syncookies = 18 p! Q$ r) u% m! c/ I
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
# c1 ~! V; a" ?8 g0 s) Q# `net.core.somaxconn = 2621444 b7 W7 c7 L. o0 a1 \3 l& K" D% t
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
, u0 D N0 r3 y6 HNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
, Z2 b% _! F; E i& ]' W$ ~1 Anet.core.netdev_max_backlog = 262144
: L" N6 O9 D" S' ?每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。# D* `. B1 x0 O& O- c
net.ipv4.tcp_max_orphans = 262144
" i4 z( f; K4 k0 j8 `1 f; M系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打6 @6 u5 J& u$ g0 E9 j
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
* Q( Q2 b, Q0 @$ F(如果增加了內存之後)。 v2 S" ]# |' r" [1 ]
net.ipv4.tcp_max_syn_backlog = 262144
+ V U. f) o: @: Y記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系8 `2 {$ B/ L. S+ t/ d
統則是 128。
' t3 z& B/ m" P0 R# X8 Rnet.ipv4.tcp_timestamps = 0+ c+ t3 m) ]: d" N
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的. B. V) t$ z/ q: }) ]
數據包。這裡需要將其關掉。
5 N( O9 }, d% y8 r snet.ipv4.tcp_synack_retries = 1+ n' }9 N0 M; E, [2 p
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次3 ~4 I5 d4 ^; B: p
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。' E/ B% v P/ \8 |
net.ipv4.tcp_syn_retries = 1; X" O& y7 X. ^# g1 U. ]: H5 T H: [
在內核放棄建立連接之前發送 SYN 包的數量。
' S" N% d: U; X) t9 Vnet.ipv4.tcp_fin_timeout = 1
! ~# a& P* V* e9 n7 C如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
! X* }/ ]' A+ A/ D至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕0 k* z- y! ?, _! @
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
2 R: A# n, n3 n) q6 d多只能吃掉 1.5K 內存,但是它們的生存期長些。2 Q* l1 [9 k7 E! _8 W
net.ipv4.tcp_keepalive_time = 30
, j+ d4 S! Q, @9 ?" n( a- F1 W當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
) N% ~, y( Y( w0 E+ \5 n& _: E! x" f* c
2 P5 N2 n; x) o+ R! y下面貼一個完整的內核優化設置:; K3 i% r+ X4 c" u* x
net.ipv4.ip_forward = 0
! i4 P X0 }7 c/ @& ^. n/ mnet.ipv4.conf.default.rp_filter = 1
% T0 g, _. Y0 X# A4 ]6 k- ~net.ipv4.conf.default.accept_source_route = 06 y; g. R) H T; f# O h
kernel.sysrq = 0
( W* n- S. x! S* }4 `kernel.core_uses_pid = 1
, H7 g; K! n2 z% e8 ^) B- Xnet.ipv4.tcp_syncookies = 1: H; k' }: _, t) I( \, ~, ^, P5 F0 G! \
kernel.msgmnb = 65536
7 z5 \4 U( r6 Z1 Gkernel.msgmax = 655367 s! S5 g8 N V& p$ s
kernel.shmmax = 68719476736
9 x1 i, `+ u. Nkernel.shmall = 4294967296
4 h; o2 k" [! G8 `2 E# U! gnet.ipv4.tcp_max_tw_buckets = 6000
; W7 G) ~, C2 w9 [6 enet.ipv4.tcp_sack = 1
4 a6 [ B+ _$ v6 @. r1 Gnet.ipv4.tcp_window_scaling = 1/ \ L- w- G$ ~, R0 f7 F
net.ipv4.tcp_rmem = 4096 87380 4194304
4 p( u$ ^1 F( @( t6 Enet.ipv4.tcp_wmem = 4096 16384 4194304
) E }# H. K' \) \3 Y* G2 Qnet.core.wmem_default = 83886088 {( r+ i$ D4 W- B8 e L
net.core.rmem_default = 8388608
5 A$ ?3 h+ O5 R, e( Lnet.core.rmem_max = 16777216
7 h, ?! B8 L( r" m9 Fnet.core.wmem_max = 16777216
$ l5 N4 N) a- ~. b. c4 H6 w; }, rnet.core.netdev_max_backlog = 262144
; A4 w* v7 c; n4 \. ]$ J0 p( U* Onet.core.somaxconn = 262144
( b! ~ y% @ w+ M+ knet.ipv4.tcp_max_orphans = 3276800* L) e9 t) k' Z* B
net.ipv4.tcp_max_syn_backlog = 262144+ Q o l. _+ q o
net.ipv4.tcp_timestamps = 0
' H2 n+ d( h8 K Bnet.ipv4.tcp_synack_retries = 1
4 D B9 i. M0 u7 ~3 x# knet.ipv4.tcp_syn_retries = 1
: q- `$ J9 i7 I& N$ ]net.ipv4.tcp_tw_recycle = 1
7 y; k5 N3 n, l) S# i" znet.ipv4.tcp_tw_reuse = 1
* }1 v% p4 Z3 }; l; s1 E1 q+ X, `5 knet.ipv4.tcp_mem = 94500000 915000000 927000000/ @& ~, x& }7 F Q
net.ipv4.tcp_fin_timeout = 1* m* s; a! ^" k/ D* F+ Y" Q6 \- P* Z
net.ipv4.tcp_keepalive_time = 30
5 P& v5 o0 o/ w) u" p, \* S1 n% [net.ipv4.ip_local_port_range = 1024 65000) n5 p) V. V; ^' a+ j
7 @) ]" e. v0 N5 @+ B, n5 q" z$ M z/ F
下面是一個簡單的 nginx 配置文件:nginx.conf4 S8 y8 _1 W! G0 j$ b4 G0 M
user www www;4 P) T6 O. d' h+ G8 q' T
worker_processes 8;
, F( Q4 h @1 M% s, g& vworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
' C/ O+ c8 m* F1 nerror_log /www/log/nginx_error.log crit;
/ ?2 d0 }) ]; s4 F" u$ t$ M1 qpid /usr/local/nginx/nginx.pid;
' t: U) O3 f+ G2 i" p1 lworker_rlimit_nofile 204800;
9 n9 C4 v2 v: kevents
* a- |/ s3 N) u{
% n, p1 w2 Q" e use epoll;
- e7 V& b7 G0 b* U; y- r worker_connections 204800;
% H- Y7 k2 q4 v ]1 ]# y1 U5 `( b/ [}% Y3 x* P" m$ i6 E. i2 G. k
http0 R$ i$ x- g9 C8 X& d
{
$ T+ ]$ Q! t; Binclude mime.types;, M3 Z* i6 P1 D3 {" Z
default_type application/octet-stream;
6 n# c/ t# E1 f* l0 ` charset utf-8;" Z3 f. h0 v7 `/ d5 c. F4 k
server_names_hash_bucket_size 128;
: k0 d7 h- ?, n+ q client_header_buffer_size 2k;$ e2 q5 f. q" L/ Y2 ]
large_client_header_buffers 4 4k;
6 P3 X; D4 o) s' P& V0 ~9 h client_max_body_size 8m;# E7 d! u* F- U, o2 A. t
sendfile on;4 C9 d: U2 g# n W# `
tcp_nopush on;& R( l* q. L5 H, Z9 q, H# S. H
keepalive_timeout 60;7 I8 ?' P7 U7 y2 j* S
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;# ~8 o7 a3 a+ f; E6 x
fastcgi_connect_timeout 300;5 u+ }( j' Q% d5 X: _/ q+ w
fastcgi_send_timeout 300;
* R4 x' e+ R3 f1 n" _1 s fastcgi_read_timeout 300;, ^3 V' ^* I6 m* q: [0 _( j# ]* Z) E% M
fastcgi_buffer_size 16k;
( k1 Z8 [) r( p5 X) X4 ^0 W3 w fastcgi_buffers 16 16k;
7 f2 }. m) t% Y X9 E8 h fastcgi_busy_buffers_size 16k;
2 D$ h4 l' c. @( N; _1 y# E fastcgi_temp_file_write_size 16k;
1 R& g, t7 d9 d fastcgi_cache TEST;& W2 y f( M( t, O! T7 x
fastcgi_cache_valid 200 302 1h;
. ?+ O, S# n4 \* c) B fastcgi_cache_valid 301 1d;
- {# e' [/ M" T& |1 h fastcgi_cache_valid any 1m;# w, O S( t6 Z$ o" w7 |" I! _
fastcgi_cache_min_uses 1;; t0 H( K! I* A) p; h$ E7 e4 r
fastcgi_cache_use_stale error timeout invalid_header http_500;
! q9 q. j" t% V4 A) a' ]4 s: |& \ open_file_cache max=204800 inactive=20s;' y d o5 I0 o
open_file_cache_min_uses 1;2 U$ ^; h5 y3 ~( m# V% ^% u+ E- W
open_file_cache_valid 30s;
+ n5 q2 ]2 g1 u/ ~ tcp_nodelay on;( o: M+ O- u& H5 W7 X: V
gzip on;
W/ m1 ~$ ~0 j G gzip_min_length 1k;
( y4 T- \; `3 i k+ o8 | gzip_buffers 4 16k;
, ^+ A+ S8 D d! c1 h) S gzip_http_version 1.0;' S& K; l9 K3 ?$ m
gzip_comp_level 2;. x7 i( R9 Y6 B
gzip_types text/plain application/x-javascript text/css application/xml;
* ^% o1 c1 k6 z, K7 m& M gzip_vary on;
2 z% Y8 w- `$ A" x$ g" w+ n; K server
# `6 x. @) E% f E2 w: i0 O& d$ F {
/ c$ f: b# L8 X; z) D8 o$ H3 Y listen 8080;% t" k" D# M/ @
server_name backup.aiju.com;
6 A' N' k2 W; l- W/ Q M# J" Q index index.php index.htm;5 }& t! `! ?% Z2 s7 Y
root /www/html/;
9 {: l4 b, }$ `8 ]5 i location /status
^' }5 ^# m. u {( i& _. g7 ~! Y4 m! ?
stub_status on;
+ G3 m7 s( q* ] _$ H! d: Q }; p; W1 S2 M& ^; f: ?; a
location ~ .*\.(php|php5)?$
3 r! u, z1 o* N, {- R {
3 k1 P D4 v+ p* h4 }7 ]' I4 B. k fastcgi_pass 127.0.0.1:9000;
" q% V9 h. E9 b) j# D' i fastcgi_index index.php;
3 u2 e- u6 a! z include fcgi.conf;
) o& z8 N q) H7 C }9 `9 F9 t3 ]3 L1 b) q: g/ ~ N
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$8 n- T4 b0 N, \4 G; _/ X( e
{
3 o/ d9 h0 w6 ]8 X, O expires 30d;3 X$ P, o4 T& n& \+ R7 U( | A
}* @' I, l7 c1 _9 P; n2 _8 |7 J
log_format access '$remote_addr - $remote_user [$time_local] "$request" '5 S( h; t! s* J$ k
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';: z8 m2 j9 |. E
access_log /www/log/access.log access;4 O0 v( M) n+ L0 V& v, m8 u
}7 n! j& y$ `4 G2 h2 I" V
}
# n. F$ h" ?( ?1 b6 C( Y- I1 R7 h# s% p& u# _2 b6 \* u
關於 FastCGI 的幾個指令:# B, V r( ^% G% s# I
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
" b5 B$ u* m& G5 c2 j$ Q這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。) ~& B$ C! ^9 |9 I
fastcgi_connect_timeout 300;
$ T m" i: v/ L# J指定連接到後端 FastCGI 的超時時間。2 G: M- R2 k8 c$ y4 W
fastcgi_send_timeout 300;8 ~" |. G" |$ ^" t, J
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。% `8 ]" r5 t2 f6 E+ z
fastcgi_read_timeout 300;# F8 {5 \ h& u" s4 d
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
6 X6 W/ W% L: a9 J0 Rfastcgi_buffer_size 16k;; B! M) q$ ^8 ~( u# F
指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
5 K: y5 Q' f9 F$ Y* _# N2 r指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過, }7 ]6 ~ O4 ~3 d
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
, ?/ H3 k/ X/ M" p4 _小去緩存。$ B9 e+ Y( A8 V9 a+ u# o
fastcgi_buffers 16 16k;/ K# \4 o5 c) ^, l4 ^ ^* o. ^
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,; z3 z& o8 s, n7 T
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
; r% O7 ~2 t! o! s$ m3 b' D當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的, [/ F! P6 L: {" l2 X. x
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
& l% h, h- ^9 ]! M3 ?置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
3 Q, s' K' C* g/ X1 M" U64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它* E+ l5 j1 ]9 ?, E% ]3 H8 ?
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。6 v) c7 e$ g8 I8 @& r4 @& k! z
fastcgi_busy_buffers_size 32k;
1 b( a- u U! j1 Y! e6 N, r這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
3 @3 w# q) K' g2 ~/ B: o2 Z. lfastcgi_temp_file_write_size 32k;2 `7 m3 e7 o& y
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
' ~! d! D; E! B9 f- l, U3 Afastcgi_cache TEST
, ~' N& E( S4 n開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
$ l9 r: Q3 a8 {但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。4 f. [ h& f& W3 e
fastcgi_cache_valid 200 302 1h;
1 y/ B1 i! y+ a" P5 P6 vfastcgi_cache_valid 301 1d;/ Z0 |3 @ [+ u# m6 w9 k$ `
fastcgi_cache_valid any 1m;
' i8 I* ~) `9 ^; j為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。0 ]; A0 {, F/ q. c" q
fastcgi_cache_min_uses 1;
- l8 u, G4 y0 q緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被% w+ w5 v8 [( u7 g2 [7 S7 v! b
使用,那麼這個文件將被移除。0 t6 d3 [$ ]& y0 Y! \& b. N% F( k
fastcgi_cache_use_stale error timeout invalid_header http_500;% _( M/ m; N( G3 _" y g7 B3 N5 o7 M
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
+ c) f' u7 b2 ]1 J. E以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理- h- y0 N4 _* o3 u
FastCGI,可以修改配置文件中的以下值:$ U8 c. G: V+ ~# z* s+ N1 k% {& A
<value name="max_children">60</value>) ]3 ?) y$ T1 W# K F" x
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。6 y# c6 r( C% F( w
<value name="rlimit_files">102400</value>
# Y+ L0 {8 f. x7 ~) {最多打開文件數。7 p* r2 l4 a$ e, u7 ~$ C
<value name="max_requests">204800</value>
9 V3 C X8 \# g每個進程在重置之前能夠執行的最多請求數。" a6 h& I/ z; j2 l0 F' L- S
; P# W! o; M! j5 j4 ?
$ v7 ]! \* r! c$ f
參考資料:4 Y! S: {* Z9 D
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
7 Z4 P/ c6 }: H- i2 o# X9 T$ N2 p9 ahttp://blog.chinaunix.net/u3/105004/showart_2087155.html
' ?) a9 v- |6 f2 Z9 Rhttp://nginx.179401.cn/' U6 i7 b* E$ D- }) i
http://blog.s135.com/nginx_php_v5/- W9 u3 W3 X+ x/ a* {2 `
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html$ @! q( m' \- P; Q: g2 }
https://www.netroby.com/view/3128# c$ h- `: F6 }- T# N" T, V' |
fastcgi 快取:
7 ?9 Q1 R+ q! a3 E* G% T7 yhttps://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
L! I6 v. h! g y1 n1 S$ F. Z其他:& u0 K( r5 s* e: e& s" s
nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
/ Y1 `! R9 \ ^% P' j1 v& i8 r4 ^2 }nginx優化:http://www.jianshu.com/p/2184654ba4b2 B4 o! W$ `: ~& S3 j2 e
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on; G. v6 N% R, R/ Z
! {0 h0 [0 f0 ?, b
5 u$ b% @: O* ?5 m
q, O* w4 @& t x& y! u% Q( O6 V0 g9 ]9 p' m+ U) s) O& ?
|