tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf. c% H/ p4 ^- G" C, H7 f
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
8 ?; f9 q" E, X3 R6 Iworker_processes 8;% m! V- t6 Z+ e( z; B
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。 ~# z/ C5 d& k" e5 O- h. c
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
7 m* l/ ~( h9 q! I為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
) x3 o& d0 z7 S% Z* p- Gworker_rlimit_nofile 102400;
8 X7 B6 R( @) o5 ~3 B: v- o這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數
6 L7 T6 L, X2 T! t+ @ u7 C相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
! n. G' }. t. I/ T. d; fuse epoll;. V/ i9 r+ N3 ^* {! w0 a
使用 epoll 的 I/O 模型,這個不用說了吧。
6 `5 c8 Y5 }0 u, u- Yworker_connections 102400;
9 ]. Y9 f" {. B) X& d每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。
- p6 t/ b# H" }8 B3 z: o2 ^keepalive_timeout 60;
2 P% n. B9 l: c4 n# r+ f& W- okeepalive 超時時間。
2 D. r' ]0 m" P( A# Q% I6 dclient_header_buffer_size 4k;
+ L; \% Y) B. d+ C客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
, E- O9 ~( {) G於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
5 O" x0 }6 l% _open_file_cache max=102400 inactive=20s;' R4 q4 o& n* ~( \5 v" }' L0 r
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
# s6 P4 c, l3 E& y. ] i間文件沒被請求後刪除緩存。
$ _" F5 t4 p" popen_file_cache_valid 30s;" n0 n, [8 t& E
這個是指多長時間檢查一次緩存的有效信息。
4 y* g# b/ |0 Q" {4 w4 ]2 Sopen_file_cache_min_uses 1;
9 q; g2 n- b' _4 n# y# W( a7 v/ lopen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打2 N% w' R( o# `
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。+ d# y8 W; N0 Q6 y+ E6 v8 ~
+ q$ C) u5 f J6 M9 z2 _8 ^: A: b% Y) L
關於內核參數的優化:
) b' J2 m% t" p c ~net.ipv4.tcp_max_tw_buckets = 6000
6 e4 G1 e" l: Z3 h( `: D- Stimewait 的數量,默認是 180000。
% F4 K: k4 ^ a b H1 Q# N3 Dnet.ipv4.ip_local_port_range = 1024 65000
/ u7 K2 w- B2 o5 g允許系統打開的端口範圍。4 \* H3 U: a1 | W: r( m2 O& ~3 R
net.ipv4.tcp_tw_recycle = 1
5 K" H* a5 h, N6 t- P4 W啟用 timewait 快速回收。
) ]3 I d) r4 m0 X& `net.ipv4.tcp_tw_reuse = 1* s4 b8 V* D$ z2 l( c
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
& Q0 n- U1 R& g, O9 _$ I+ l7 m# dnet.ipv4.tcp_syncookies = 17 s- U, f) C6 N+ H
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
2 r( `& [2 }$ d$ D( x: Snet.core.somaxconn = 262144( O. O; f8 z" t" I& T" }/ K) A
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的, [: I( Y/ T3 y2 P& W& v+ x$ @) X
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。, P j$ ~1 Q2 T* I$ @
net.core.netdev_max_backlog = 262144( T' A) P6 ?+ P$ E: |6 }# n
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。2 t4 g# I; c: M) o! s2 l/ Q$ `
net.ipv4.tcp_max_orphans = 2621444 m* X1 c' O/ n3 ?
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
( q. O+ A/ q3 o: O; ?印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
4 M$ L7 d6 K" j4 \(如果增加了內存之後)。
' `; }, T8 m5 h/ Jnet.ipv4.tcp_max_syn_backlog = 262144" M' J; \ |2 t
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
- N8 y% r/ }& B統則是 128。
: q# C+ O& G2 |2 I8 Y" q* Xnet.ipv4.tcp_timestamps = 07 W; _1 N. I( W( Q; X1 u- I! ?. d
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的6 A9 @" T1 s$ M) a5 f! y
數據包。這裡需要將其關掉。3 `$ ]: U# P ~+ n
net.ipv4.tcp_synack_retries = 1
+ |% }4 V' Q* n9 ~- z$ {為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次
* G( R1 C! O1 U握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。1 h+ c/ L& |- i$ d3 v5 F O8 ^4 }
net.ipv4.tcp_syn_retries = 1
_) O9 |- |1 ~* N; W. y+ f在內核放棄建立連接之前發送 SYN 包的數量。
5 v' g! H+ L+ G: knet.ipv4.tcp_fin_timeout = 1
' Q* u3 S3 Y' B0 d8 E/ r3 |如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
. A: }* ?9 ]* T4 u0 o! W1 K3 Q4 e至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕. a1 g% v5 E: M o
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
0 o& o+ a+ w S Y多只能吃掉 1.5K 內存,但是它們的生存期長些。
" t+ O* W0 n& K) x3 ]+ knet.ipv4.tcp_keepalive_time = 30) F$ T( g7 e* ?" Z
當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
6 P9 P6 Y& }% i% ~( t/ J' I: I+ e' c" J
, O8 g+ O4 S8 s4 o下面貼一個完整的內核優化設置:
( D4 t% e8 w+ _- C# S8 cnet.ipv4.ip_forward = 0
2 t4 w" v \6 }0 g! g& `! Znet.ipv4.conf.default.rp_filter = 1
% {. k. S* d Z9 y2 d3 \net.ipv4.conf.default.accept_source_route = 0# V( D1 d8 Z* G& e; M) ?+ G
kernel.sysrq = 0
6 _* n% h, t! Y `& o" }kernel.core_uses_pid = 1& h0 d! B; a" j
net.ipv4.tcp_syncookies = 1/ [( q8 K. r8 G) ], k' |. p% Z
kernel.msgmnb = 65536
! s3 C3 a" E2 ^' n' t) c' Kkernel.msgmax = 65536& p( `/ E" N( w7 C T, j
kernel.shmmax = 68719476736
+ U0 e# W- }6 W* vkernel.shmall = 4294967296( D& W8 M& ] i1 g6 d- F
net.ipv4.tcp_max_tw_buckets = 6000
3 R. z% ~- z) B8 |9 Lnet.ipv4.tcp_sack = 13 d# F4 N1 U0 Z* @* M
net.ipv4.tcp_window_scaling = 1
- _/ L8 {/ X( F9 _! ?$ P' Onet.ipv4.tcp_rmem = 4096 87380 4194304" E" v+ c2 |/ O/ @* F# j1 x) ~
net.ipv4.tcp_wmem = 4096 16384 4194304
. \& a2 H/ h) ^. K7 p5 D- Qnet.core.wmem_default = 83886085 @. ]& {& X$ b3 P5 g+ L
net.core.rmem_default = 8388608+ {4 G% y K) R3 ]5 t8 Y3 ?
net.core.rmem_max = 16777216! T3 `, x) F. V
net.core.wmem_max = 16777216. _6 m! e- a2 z) |
net.core.netdev_max_backlog = 262144
6 t, e K# L+ Q C0 Q Pnet.core.somaxconn = 262144* {2 @2 k( G3 t" L Q
net.ipv4.tcp_max_orphans = 32768009 f9 L7 W" {+ r2 z
net.ipv4.tcp_max_syn_backlog = 2621440 X% i* }1 W1 r; V: B
net.ipv4.tcp_timestamps = 07 A) D/ [: @% q7 C
net.ipv4.tcp_synack_retries = 1 b; l1 l+ a5 v: O) X7 K5 P0 Q
net.ipv4.tcp_syn_retries = 19 x9 n( m1 M/ X6 a! h) B8 b
net.ipv4.tcp_tw_recycle = 1/ `5 Q. Y3 Q5 a# P+ V& l( H
net.ipv4.tcp_tw_reuse = 1
5 \: d; ]" l1 _9 [' S4 Qnet.ipv4.tcp_mem = 94500000 915000000 927000000# j) z2 @, f6 M9 c+ E
net.ipv4.tcp_fin_timeout = 1, g" _; |& d; V% ]* t" u/ l
net.ipv4.tcp_keepalive_time = 300 C- m2 y4 }1 k$ I: M4 A) v
net.ipv4.ip_local_port_range = 1024 65000
: t7 x" o2 p$ F2 L6 M& D+ F V/ Q m8 a/ [; D; a) Y# P
" W4 m+ d9 Q) u1 ]下面是一個簡單的 nginx 配置文件:nginx.conf
; [7 J4 D' f; N2 {5 ]user www www;
4 w( J# p( k" c5 G \worker_processes 8;
, j1 H3 p; |2 L, ^7 J; m4 Rworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
! @3 c9 |- m4 z) u. w7 ferror_log /www/log/nginx_error.log crit;
^+ q. N# ~- E7 ]2 x* Hpid /usr/local/nginx/nginx.pid;* p0 [! G- C1 R! a( i9 U
worker_rlimit_nofile 204800;
' i$ [: }8 u. R' ievents
; v4 Y5 B5 m$ F{% u& u5 E3 Y9 l. m2 ]8 C
use epoll;
7 O; d( s. z# J0 f' }$ C2 T ~ worker_connections 204800;
/ ?+ p# p* [, L}' B0 y$ x: o% A; K# y2 g9 p
http6 p7 v# k# U2 k) x* M4 F9 b
{
2 h( X- [9 Q6 Ninclude mime.types;; a7 a+ y7 K1 y6 @4 P' R
default_type application/octet-stream;
6 p& f. g+ S2 p0 ^# Y: \+ T charset utf-8;' ^- E9 a. ^5 b$ b5 a: i9 I2 W+ j
server_names_hash_bucket_size 128;9 E: C. ~3 w S$ o) U* L- M8 [. K
client_header_buffer_size 2k;" K( d: H, {5 E' ~# o
large_client_header_buffers 4 4k;2 L- c# G `0 G* z6 P
client_max_body_size 8m;
& i! ^0 F2 _& s r2 c' Z4 T X sendfile on;2 N- S4 E# E$ u0 K- o
tcp_nopush on;' A2 ^ h5 s, I2 i2 Y: f/ @' e
keepalive_timeout 60;
) |/ I7 j% J) P fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;0 J, z# O0 O3 |* A
fastcgi_connect_timeout 300;
2 V- f% A# k1 @2 z2 n( I- U fastcgi_send_timeout 300;/ w( r P2 y! |
fastcgi_read_timeout 300;! }" |% y: T) p3 ~5 ~' ^
fastcgi_buffer_size 16k;) V9 g6 x9 N/ c/ [, e% m4 g
fastcgi_buffers 16 16k;0 O% i6 c# n4 T8 S9 P1 z4 X8 M! P
fastcgi_busy_buffers_size 16k;
/ D r; C6 l: F4 [/ M' i fastcgi_temp_file_write_size 16k;5 d! G. \# v. H* b, u, A
fastcgi_cache TEST;- z5 ^4 A. ?1 W+ t' k' S
fastcgi_cache_valid 200 302 1h;
2 u6 f1 n k7 k& b5 `1 n fastcgi_cache_valid 301 1d;
& d- O8 G9 r @6 `" g$ a- w9 s fastcgi_cache_valid any 1m;7 \, j, N) J2 R6 g- j
fastcgi_cache_min_uses 1;
4 j6 _) k/ f* _2 r* Q" x fastcgi_cache_use_stale error timeout invalid_header http_500;
8 [* ^* _& |6 k. Z5 a$ E open_file_cache max=204800 inactive=20s;
" o$ |, j5 Y3 r" D1 K open_file_cache_min_uses 1;5 Z0 @. ?1 y& ~9 S8 z, z( `
open_file_cache_valid 30s;
* U N% z* t# w, f tcp_nodelay on;* Y7 C3 @; q; ] c6 F1 N
gzip on;; q) b! }$ S+ `7 ^% q. C' ~# U5 \' M% H
gzip_min_length 1k;) g/ j: ~2 D0 y) \- C. y. k* N
gzip_buffers 4 16k;3 ^" V" M" m: C) ^* N" i) F
gzip_http_version 1.0;
$ G: ?) i- ?- ^5 f8 R( L6 c5 Y gzip_comp_level 2;- A# l0 v7 A+ p5 a( y0 f& h
gzip_types text/plain application/x-javascript text/css application/xml;
, y+ d9 B3 b5 E+ r+ P* @* N) E gzip_vary on;3 ^4 G- r2 g; }+ m
server# a/ b) z' b( H4 N1 w1 q
{& D1 k% S5 S. o
listen 8080;9 b9 a# A: D+ p/ s9 V) k
server_name backup.aiju.com;4 c z& C) [- ?0 i
index index.php index.htm;
* Q9 W2 I0 [5 y: w1 P$ w$ T+ u6 f root /www/html/;9 J: M; L3 `) I+ J$ `5 q3 E
location /status5 g* n* y; V& w5 t+ s' Y$ t
{1 H9 h. k" D& X% h
stub_status on;# I. a, }" D. O L- h; ?, i. p! s
}
1 M7 z- L7 ?/ E location ~ .*\.(php|php5)?$! [% b; W# h) Z( G
{! l2 S8 k; r9 \% Q
fastcgi_pass 127.0.0.1:9000;
3 e2 i! z( _( ~6 J fastcgi_index index.php;5 I( J5 B5 _) ~7 D
include fcgi.conf;
: Q2 F) z$ L. W" T9 d }5 ?4 G& m+ D% R
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
4 |8 \* ~5 E' M- T' v( C( C) c {
0 w( Q! D5 T) d9 V- @ expires 30d;) V- H0 t$ W, {0 r; v7 N+ }3 q
}4 E) t) o% r( [& g5 T
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
0 P, V) _$ ~' ^ e+ n '$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
- Y7 R- p& a( n1 S. V Q. e access_log /www/log/access.log access;. }& S1 J5 K" s: n! m; c
}3 Y) n& C- D" P# z& x5 k
}% D% Z% d( }+ b
7 w/ w" _- U5 {! R( A; ?
關於 FastCGI 的幾個指令:1 T9 V8 n: Y, f& o# [
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;( f2 M: B2 U) t# @0 T8 @* t
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。" h+ j+ W$ D' V+ E- h! U- u. k
fastcgi_connect_timeout 300;/ B0 H6 g) r1 W- B. z3 }+ R3 L
指定連接到後端 FastCGI 的超時時間。
$ E2 N! O5 T4 I- mfastcgi_send_timeout 300;7 f) U& Y G" p! ~9 _6 M
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。4 E. s' X' T \# f1 M: h
fastcgi_read_timeout 300;4 X9 p4 R3 l5 y" O: h6 S
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。. y2 E8 M) D' q
fastcgi_buffer_size 16k;
0 `, }* z% `. v3 q指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的3 }3 k* U5 `2 h. _
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過( `: f% |3 k% ?/ V% Q1 l
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大( i+ H* L/ G; E4 p% r6 c, j
小去緩存。
/ G2 _: I# v. N4 n. U3 s( Vfastcgi_buffers 16 16k;
1 u, ]( n- p: I! J- K, i指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
7 p- t! Y: L6 d- Z8 k7 W, u則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
9 g2 ? o( _* q當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
" ~! F4 T |" T# P( e& i站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設, u5 @! ~# C8 G1 c5 X* s' \
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4" T3 p: r5 D9 v. b- v
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
4 V: f5 K+ Y, d- s5 ^' O5 s$ n會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
/ n8 k2 G I% I( Gfastcgi_busy_buffers_size 32k;
/ t& i' x* @& ~6 Y1 R, k M% Q這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
0 u6 N; C. J# s3 N' i S% ]# l* Y; mfastcgi_temp_file_write_size 32k;; C8 w$ |- ]* m, J
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。9 Z9 ^) S- H3 S4 b) f/ ~/ x
fastcgi_cache TEST
9 u$ n9 Q' s6 j8 v! X; e開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
& e% e6 @) n _+ J( \9 R但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
* f% h/ s* J, U" J+ C* K( A2 y x' p* F: Qfastcgi_cache_valid 200 302 1h; O: i6 L9 ~: Q( m' C
fastcgi_cache_valid 301 1d;
0 [" _3 v/ v+ rfastcgi_cache_valid any 1m;, C$ t2 T3 ^ f/ C- A/ E; A5 `& O
為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。+ w* g ?4 |; b8 w
fastcgi_cache_min_uses 1;3 o$ U& ?+ {% N3 E! l% N0 r" T3 P* B% \
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被% Z/ ^. ]7 @/ r6 K
使用,那麼這個文件將被移除。7 b0 }2 S5 X. Z9 L) g5 B0 X
fastcgi_cache_use_stale error timeout invalid_header http_500;! W* V; z+ I1 v. N4 Z
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。. ~0 |+ Y- {6 C+ P/ ^; ^3 b
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
8 V) c" j7 B5 b0 e3 m! k0 R/ U' MFastCGI,可以修改配置文件中的以下值:
/ G) W4 g2 E! n<value name="max_children">60</value>
5 y+ P8 q/ L) W& r4 e% u6 t, h同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。9 O2 m5 E0 W; X% ~
<value name="rlimit_files">102400</value>
0 Y7 m7 ?! s! V& C. R, H最多打開文件數。7 r5 J) a) {- z# V
<value name="max_requests">204800</value>8 k* g& [9 }) }( O: f
每個進程在重置之前能夠執行的最多請求數。! Z: {' G# U, U3 l( m
5 J c; `# y3 j! q; V
% Z- b* p8 e/ J8 |參考資料:5 ?( d# X9 J, ]( D
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf3 |* Z9 b8 h9 u0 L& ?, N! F9 M
http://blog.chinaunix.net/u3/105004/showart_2087155.html1 h" ]1 w! s+ c/ b0 p0 N
http://nginx.179401.cn/
( {! ?3 Z. W9 j; s( ^- f4 g! jhttp://blog.s135.com/nginx_php_v5/
. V4 v% ?1 e$ Q, shttp://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
+ t+ A/ l2 Z) h8 y# p9 A& o. M5 b6 ]https://www.netroby.com/view/3128
% D9 V% [. r6 S$ ? U7 nfastcgi 快取:$ v4 K- H; {1 T4 O" c9 n3 e
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/1 `- a- \ s' ~" k: ]9 R
其他:
" w; [, J& V* |" n; Y/ s* L. dnginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
/ |6 r& i( @. Unginx優化:http://www.jianshu.com/p/2184654ba4b2
5 i2 H) a# |9 }! ?gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on# Q) V3 N% ~( h3 c
0 O4 L" n" \- h
/ Q: L4 d$ P9 I* M, L5 |$ _! {2 V6 F2 s$ t0 N
6 ?( N! }* h; D+ N& X
|