tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf% c0 ~7 y4 J0 b( r
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
1 r* @) k6 J) y8 G2 `: l a4 uworker_processes 8;2 y3 ~+ [7 [1 w6 e. i/ x( _
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。% w8 w# c+ p2 i+ x# z1 ?
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;) O: K6 w4 j1 V7 J$ J& @) h
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。, x/ a2 ~: u5 Z4 t( v b6 u2 _
worker_rlimit_nofile 102400;
1 r+ H/ ~0 W# U5 m這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數0 R4 X; N( g/ X/ f: m4 T- Q
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
$ |5 t5 t' d/ Q6 h! J( W0 fuse epoll;2 l$ G) e. T+ U9 j1 M1 i
使用 epoll 的 I/O 模型,這個不用說了吧。
' D" k! o1 ]) q9 V* r$ rworker_connections 102400;
4 J( ]" A0 j2 q4 D6 l每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。# P; ]- v1 R' B6 q( r* y6 o9 ~1 X+ ^
keepalive_timeout 60;
9 Z3 }- W' [; z6 h2 c) D" U, fkeepalive 超時時間。% b6 t) v5 ^1 i
client_header_buffer_size 4k;
: O, C7 o& d/ f- ~客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由" N& {# ~ ~7 G# R7 ~$ g* q6 s
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
: k- K4 d5 h0 Q# Gopen_file_cache max=102400 inactive=20s;
- K/ c+ d9 u6 E這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
# z* Z$ b5 G# Y" U @7 `3 z間文件沒被請求後刪除緩存。
p5 K: @) s* j/ B5 [. Popen_file_cache_valid 30s;5 g: H, p' w9 Y# m/ P8 d. W
這個是指多長時間檢查一次緩存的有效信息。) i, l8 h* ], t
open_file_cache_min_uses 1;
0 w, U, w9 H) E! n6 wopen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打$ I% L) ?: D7 o5 E
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
$ o5 R O2 S7 T3 ]4 u+ g! o: Z; B. B( o6 T( x, j
/ |9 b9 v B* [/ D. ^關於內核參數的優化:( e/ T# t. M% u
net.ipv4.tcp_max_tw_buckets = 6000
1 Z! a& ?/ }! H# z+ Utimewait 的數量,默認是 180000。
/ G) f" t4 I6 }9 Snet.ipv4.ip_local_port_range = 1024 65000
7 v! i! A2 _' k& X7 Q8 _# J9 z允許系統打開的端口範圍。2 R$ k8 G o. e0 D+ e' V) _% R1 g
net.ipv4.tcp_tw_recycle = 1
( Y1 e1 N# _* d( _) O啟用 timewait 快速回收。
4 D( w2 ^/ W5 q1 R9 u. y# Unet.ipv4.tcp_tw_reuse = 1) f1 a, `, z8 v
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。: c4 _1 L: p, u
net.ipv4.tcp_syncookies = 1
5 _% {6 J1 W! a開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。+ Z2 E& I* q6 i9 ] v: j1 d
net.core.somaxconn = 262144 r. e' @+ n* D& c! m
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的" g' s2 ]3 n2 C+ a* @- B3 p
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。6 c/ p$ q' U1 w7 N4 n+ @- y
net.core.netdev_max_backlog = 262144& E$ b/ a0 @$ F) ^* l9 p' j" ^
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。$ ] ?9 a) J; ` b# M+ B
net.ipv4.tcp_max_orphans = 262144
- _ B" h9 u$ {: x系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打; S0 x5 N8 b& ]7 L5 |* ~
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
3 r' h9 J5 W: I(如果增加了內存之後)。' }3 _1 Y) m" Q R$ m
net.ipv4.tcp_max_syn_backlog = 262144
8 Y% y1 {" I) s& O% F/ |記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系& f$ ^. K$ s7 M3 J( q' g5 Z
統則是 128。
! `4 L$ U! j* }" jnet.ipv4.tcp_timestamps = 07 v% x2 ^( P% q* b. ` y& V
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的3 G) m# G. T0 S& l/ V1 G: F% Q: X
數據包。這裡需要將其關掉。
W' h: p V- h+ l. m7 Snet.ipv4.tcp_synack_retries = 1
/ z @5 J6 H% b/ d為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次 c! j" b+ A8 U* j9 n
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。. N5 J/ r6 E" m! q# A; F
net.ipv4.tcp_syn_retries = 1/ q! w O* [5 |) {' V% u
在內核放棄建立連接之前發送 SYN 包的數量。! [7 s1 @6 m) ^5 q, l6 M( B, B/ Y
net.ipv4.tcp_fin_timeout = 12 Z0 [/ k9 P/ `. P0 b9 s- o
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚( [# Z1 z' I9 ^, p( C
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕7 b& `! X* S% W M
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
- e* s' {% P, F: ~. D多只能吃掉 1.5K 內存,但是它們的生存期長些。
3 z# L% s' W" A0 |% o+ fnet.ipv4.tcp_keepalive_time = 30
& \6 {6 A- c6 H- L當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
" b/ d* E! {' E% U$ f$ E( C8 E6 u9 v/ F4 [
& ]+ M2 }0 c4 |下面貼一個完整的內核優化設置:
, q0 u9 k) W1 ?, o) Ynet.ipv4.ip_forward = 0
1 }" B3 O% L/ I& j1 L1 M4 U% Snet.ipv4.conf.default.rp_filter = 1
! r. w2 ^0 ~' Unet.ipv4.conf.default.accept_source_route = 08 t, V1 K1 Z9 r z I' M8 X
kernel.sysrq = 0
) @# D# ?5 |$ C/ kkernel.core_uses_pid = 16 r+ \: [% L+ {. H6 ?
net.ipv4.tcp_syncookies = 1
9 O) v. Q9 @' a$ _$ N+ H- Ikernel.msgmnb = 65536
# {+ l* G) M( G' U4 Y9 skernel.msgmax = 65536; e, ^; A X+ V0 X. d2 S6 a: X1 @
kernel.shmmax = 68719476736
^; v( O' f0 p/ U6 Dkernel.shmall = 4294967296/ r) A R: K# E% B
net.ipv4.tcp_max_tw_buckets = 6000
* B4 ^- E- H! nnet.ipv4.tcp_sack = 1
" [9 W2 K; y- znet.ipv4.tcp_window_scaling = 1
; ^+ d# f5 z- M4 U0 W) D0 R/ K6 Wnet.ipv4.tcp_rmem = 4096 87380 41943042 \! `. [, z" M- c( W+ }0 i
net.ipv4.tcp_wmem = 4096 16384 4194304
. p' R5 p9 ?2 R: J8 q9 I. q9 G9 pnet.core.wmem_default = 8388608
2 c! {& s Q2 `! Y2 h" l% i" Vnet.core.rmem_default = 8388608
& z/ A: k, m' k* G: m4 Znet.core.rmem_max = 16777216$ [4 F3 w; f# d1 G
net.core.wmem_max = 16777216- G/ W. n2 Q0 O9 m) p6 q* `/ q
net.core.netdev_max_backlog = 2621440 S6 V' b3 Z0 y$ _
net.core.somaxconn = 262144! g: N; t1 Y* o
net.ipv4.tcp_max_orphans = 32768000 ^4 @: E' R; a- {; g
net.ipv4.tcp_max_syn_backlog = 262144
) `) |. C H& w# Knet.ipv4.tcp_timestamps = 0$ l+ z. {5 F) v" E' u
net.ipv4.tcp_synack_retries = 1
0 D- \+ l! G4 V& C+ ?3 Enet.ipv4.tcp_syn_retries = 1. y/ _" f0 r: X4 l; ^
net.ipv4.tcp_tw_recycle = 1
. x- Q7 A9 ^. M. I5 |1 X3 C% Snet.ipv4.tcp_tw_reuse = 1
, y/ M* b* L8 Q; e/ F# Z6 Q Nnet.ipv4.tcp_mem = 94500000 915000000 927000000
( C7 ]3 f7 n3 Y4 G- Gnet.ipv4.tcp_fin_timeout = 1
3 g' H9 b( ] v( C+ z7 d Wnet.ipv4.tcp_keepalive_time = 30
* b3 ^' N! ^, Cnet.ipv4.ip_local_port_range = 1024 650008 g# r+ E0 I( k% h# t7 V8 {% Z
# g8 @6 v# Q/ h4 b( I1 _2 p+ E
# R" y' h4 E, K6 }) X
下面是一個簡單的 nginx 配置文件:nginx.conf% O6 n, c% t: W3 r! |9 x
user www www;
1 A. j) O/ ^! d+ z2 Hworker_processes 8;+ E6 o& ?4 X( L$ L: x
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
) }4 W- K7 D- p$ j4 Rerror_log /www/log/nginx_error.log crit;
& p3 b: b- T+ o% ?% Gpid /usr/local/nginx/nginx.pid;! K2 `) _ L# v3 V9 K }2 I& w
worker_rlimit_nofile 204800; ^- Y4 a4 {2 E; L; g7 J' Y, t
events
4 d& J5 I& }0 W, J F% g{
8 D2 u% L+ ?& v use epoll;' C* J6 P+ i( y6 e: F
worker_connections 204800;
: {4 U0 Z6 a+ B% N; m* D; S! Q}
9 m# \+ V: a$ D* L* A$ x! jhttp
1 }, d' V, G% i& L{
% P- b& s* x) U9 L) `/ Tinclude mime.types;$ |" P7 q) {# a/ R
default_type application/octet-stream;6 w5 d2 _8 N9 ?+ z0 e
charset utf-8;
) R5 ?' q) ^9 o9 I' G server_names_hash_bucket_size 128; s' T4 H& ]" {7 E' }$ s. s
client_header_buffer_size 2k;
1 h9 T2 h: A+ A! R' a+ I# h$ y K& | large_client_header_buffers 4 4k;
2 D! x% a. ~8 S6 x/ G% y) g client_max_body_size 8m;
2 H2 ?0 B1 o5 P7 [0 Z sendfile on;* y" h% W; u$ j
tcp_nopush on;
3 m* q+ w8 d N4 W keepalive_timeout 60;, @ Y3 t+ A& I6 ?
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
0 p! h3 e( u& T/ k# Z/ N1 ] fastcgi_connect_timeout 300;! F6 ]& @- D# f% P4 g
fastcgi_send_timeout 300;8 ~7 V% P! V; f
fastcgi_read_timeout 300;" K1 v9 V9 g2 ?0 P" m: \, i! ^
fastcgi_buffer_size 16k;
2 k' W( Z; b1 Q fastcgi_buffers 16 16k;
4 S6 z* E! o" o2 X/ m fastcgi_busy_buffers_size 16k;
4 u% R) C' D& I# U: _2 A0 s' \ fastcgi_temp_file_write_size 16k;* q: U6 c0 i2 v* w
fastcgi_cache TEST;! w9 p. i( h9 R+ v( U
fastcgi_cache_valid 200 302 1h;0 ^: J+ m; C Z5 |
fastcgi_cache_valid 301 1d;, E! q9 s# D- a8 z" B4 p
fastcgi_cache_valid any 1m;3 m6 F1 ?$ [3 P) W1 {. n
fastcgi_cache_min_uses 1;, G# C5 S4 t6 p8 g4 g1 B
fastcgi_cache_use_stale error timeout invalid_header http_500;
: l4 i) N1 u* v4 c open_file_cache max=204800 inactive=20s;
; }" ^5 T' T' M) `5 X open_file_cache_min_uses 1;/ Y9 n% v9 D/ ^/ T# c0 Z1 a
open_file_cache_valid 30s;
; L; o2 K5 J5 {9 z! v tcp_nodelay on;; p/ S, v& k$ _2 K+ l# c4 }
gzip on;
% c! g5 n0 R: `6 i+ |* w- B/ W5 d2 N# g gzip_min_length 1k;& Y; {7 W; D; R b- q9 V0 {4 o* j
gzip_buffers 4 16k;
* w( w7 m' z# Q0 g5 T" a. k" X gzip_http_version 1.0;) A$ \: r F6 P7 L6 ^! E. u
gzip_comp_level 2;; @3 t7 W3 |0 u2 M+ I k3 |
gzip_types text/plain application/x-javascript text/css application/xml;* R% h1 `+ s0 M$ ~ Z
gzip_vary on;
2 J9 c6 x4 N3 I0 c( N" k& m server( k \/ n9 J/ I6 k# W# @0 Z
{
/ }/ H9 U/ g* Z; v( W' Y- l, S" ~ listen 8080;' f, s# D1 g" f0 |( J3 Z2 N9 i: E
server_name backup.aiju.com;
% Z" v3 p4 V& o3 l0 w( R8 e9 r index index.php index.htm;+ K- Y/ j% H2 ?( Z2 n
root /www/html/;
. D% A7 j' j$ n4 H6 m location /status
, |: l; S9 q5 O8 K {
2 z) u7 Z) P/ b' [ stub_status on;) d1 U5 N* z5 t M7 R( s
}# t% a; R8 f+ k9 R- P; p7 B7 N' I
location ~ .*\.(php|php5)?$
1 j- z' i0 u3 `4 |; ]3 W {
0 ~) j2 `/ _% }4 l7 R fastcgi_pass 127.0.0.1:9000;# l. B/ ]3 [8 `5 Y
fastcgi_index index.php;
1 F% H) X: L5 F: v9 v- L. J; q include fcgi.conf;- n- W& z4 X( p/ V; x
}1 t+ S: M* n: Q) K- u1 t/ x7 m! i
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
2 O' D) d+ e X( H {' L& I5 j4 t! s$ ?8 a8 q. E/ U* n
expires 30d;
/ z q( g' G# Y7 H& }$ H% s! X }
2 f4 \! b p0 A; \. h log_format access '$remote_addr - $remote_user [$time_local] "$request" '3 D, N% R' ^" h, ^3 a" L
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';: c) ?/ n6 F1 `: Z7 b& q9 H9 s# T) V
access_log /www/log/access.log access;
" a5 G( y7 @& P; J8 v& s }
+ s8 A4 t/ T# P3 ^}( L# v9 d* p& C# m" \* ~; K Z6 I
; F) W5 g5 I3 D8 v( s3 c
關於 FastCGI 的幾個指令:+ k1 Z& @: f/ n! {' _' Z
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
/ l, ^4 G" v9 R) M這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。1 T7 _: ~$ _) c8 U
fastcgi_connect_timeout 300;6 }% i- p( ^- a# \0 }5 h& F; m
指定連接到後端 FastCGI 的超時時間。
# r" m8 T( J, ~- s8 q3 w5 ^, @fastcgi_send_timeout 300;/ f' m- Z! ~/ Q5 S j5 a" k
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
7 p/ m& L9 H9 c4 Z# t! w* gfastcgi_read_timeout 300;3 }! O( ?9 ?5 h" [' N
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
, g+ N( [$ [- m0 K" Cfastcgi_buffer_size 16k;/ o5 c2 ?4 M' E4 @* I
指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的( E" J$ t6 F* I& U v; X
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過3 q" ]4 g# f' B# X
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大) e6 M, |# X1 [8 L0 Y. S
小去緩存。% ]1 w! ]! O3 k. `
fastcgi_buffers 16 16k;+ r! e! |: S1 g4 h5 g
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,8 j. z- b8 @+ v: }) b+ e
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
8 c4 j3 y0 `/ Q6 F% `' X當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的& u2 E* d2 N# x" b" @7 p
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設6 [$ ]* b! k+ N! [3 n7 c. d+ b' W/ a
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 49 V6 u1 i/ T$ O: P) M
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它' H/ @, ^" _( p+ n6 I
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。, _9 z9 Y. o; p7 d3 x
fastcgi_busy_buffers_size 32k;/ G; O+ O4 x2 M: i$ Z
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
% X* [9 p4 J( S- @$ \$ gfastcgi_temp_file_write_size 32k;
3 g7 ^7 r9 ]4 t+ W在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。' ^3 U: k" A$ C8 d) W' h5 |$ @
fastcgi_cache TEST7 P) V: X1 y- {
開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
$ Q) F1 n0 g& ^% U, D但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
, H6 e1 i* x) ?8 N* M' p1 ^8 ]fastcgi_cache_valid 200 302 1h;5 X, C8 N/ [" b' G
fastcgi_cache_valid 301 1d;
& l1 G3 S# \/ ^/ I* R" g9 _fastcgi_cache_valid any 1m;
6 n. u- @! C' @6 {為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。" j( o- { p1 ~; G/ r% Q
fastcgi_cache_min_uses 1;3 I z' w* s5 B% m
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被9 n7 @+ L" F9 U2 h G& N/ r% \
使用,那麼這個文件將被移除。" @1 E; b( X2 }1 i. D R# X. j
fastcgi_cache_use_stale error timeout invalid_header http_500;
2 J8 k+ C4 ^: X- q' N不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
2 j1 ^* T4 y/ s3 i; O. c' J8 Y2 n) l" E以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理( l& e4 A2 `% K9 T, x* I
FastCGI,可以修改配置文件中的以下值:# L* }% Q, Z) @ F2 {
<value name="max_children">60</value>. Z# W3 `3 l4 X& E/ k
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
+ p3 R# v' U2 c& r7 j<value name="rlimit_files">102400</value>
% O, X7 q7 p. p0 _; z8 ?- f最多打開文件數。
' w+ f; W, \' @; w# A<value name="max_requests">204800</value>/ f8 Y9 d# J7 V7 E
每個進程在重置之前能夠執行的最多請求數。% t3 j( O$ O1 ^
) i2 C. W B( I. N
0 {; A* B# Q& S$ g) w/ {參考資料:4 y+ b: H4 }" V7 o. Z, h4 }- B
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
; }0 I! M+ X, v' Rhttp://blog.chinaunix.net/u3/105004/showart_2087155.html
* U/ e) q3 p6 bhttp://nginx.179401.cn/& H r! j4 ?! w- X6 { m9 {
http://blog.s135.com/nginx_php_v5// A2 s, m9 K/ x+ @. ^: i, t
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
! m+ k; {" P) r, Hhttps://www.netroby.com/view/31289 m" q6 v( ]0 U- V
fastcgi 快取:2 R5 L3 l0 Z1 t. @6 @
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/3 L) V' e: }- M
其他:
3 W( `! Z8 F8 a% ~4 ^, V: Mnginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout2 ^7 v% u- f8 W b/ }! S2 P
nginx優化:http://www.jianshu.com/p/2184654ba4b29 ]7 V( G! l2 Z8 K: x+ ?. _' x& p
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on
7 u+ C2 t* F, L1 t0 O! U) i. Z5 U8 h* ]( ^; O/ X) I, F
" N0 S9 B9 X# R# K
( R. i/ E% ?+ P5 n. w; v
1 G1 ?9 O+ d) ~; g; D8 C( T |