tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
! D. H* d2 B5 _2 W3 x) r4 Q) i1 n5 `* {一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:7 j) n1 V( U1 g& U
worker_processes 8;: U9 a3 C3 | G( P6 y: t& g* k
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
7 {7 Z0 o0 Y* [( \6 s1 K" f0 Q+ Uworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
/ q- z( V' q( J! P! e; |為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
# Z* f3 F3 F( y d! w2 q8 sworker_rlimit_nofile 102400;
+ F! Z3 k/ ~1 e# V這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數
; y% O8 Y( R% t. C相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。, V' }) `( n& c. ]
use epoll;
$ ?( i: N! D( f" A- `1 N使用 epoll 的 I/O 模型,這個不用說了吧。# `2 Y3 D3 f: ]0 |
worker_connections 102400;/ l8 _, V# Z* t$ V( U9 Y
每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。1 w/ h' q. u$ \9 J
keepalive_timeout 60;
& X! X7 Q1 i% fkeepalive 超時時間。
) L9 M; t0 B6 A" ?9 l& Y2 dclient_header_buffer_size 4k;
( @$ V3 Z1 A/ ?* H# D4 K. @客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
# z" S V; g4 L0 N' M- y3 h於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
2 ]. l7 D$ e( B+ H# uopen_file_cache max=102400 inactive=20s;
8 H& C3 S/ l+ K2 p7 K這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
5 N' H7 i# C# W3 M, c6 k, y7 t, ?間文件沒被請求後刪除緩存。7 I2 R3 v* |- [3 b
open_file_cache_valid 30s;
F% I0 `% f7 D2 ]9 x, ?- ^這個是指多長時間檢查一次緩存的有效信息。
7 Z4 ?( e& X1 b. `8 ^9 xopen_file_cache_min_uses 1;( S8 a8 @% Z0 O& u" i
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打4 D) \, D. F# t! N0 z
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。' |% A3 e& [; H B: w! O2 y
; R2 N, R1 o9 U0 \/ k4 L, X+ s5 w C M! \
關於內核參數的優化:
& p9 M+ n* u' _8 D( wnet.ipv4.tcp_max_tw_buckets = 6000
7 t. w7 m* }. L+ b3 V' utimewait 的數量,默認是 180000。
% j" Z/ r h! [net.ipv4.ip_local_port_range = 1024 65000
. z" V ^0 `/ P6 y4 I g0 v3 z允許系統打開的端口範圍。+ D$ @5 A$ p4 H! A/ u- w* O
net.ipv4.tcp_tw_recycle = 18 v! `' ~7 K( j4 e: `2 {
啟用 timewait 快速回收。
% N: P* R6 o0 R$ B1 S+ \' Mnet.ipv4.tcp_tw_reuse = 1
0 X- K+ ?. r( V% V1 D. k7 K- z) r開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。, j- N! \% Q/ {
net.ipv4.tcp_syncookies = 19 r" g1 X2 Z$ @" W
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。/ C) U( \$ l# A( |5 `/ Y4 X+ O
net.core.somaxconn = 262144
7 b. w$ e! L& ^& R7 Wweb 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
: P/ Y2 F5 g/ J& t0 QNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
% }. U: C# V" Inet.core.netdev_max_backlog = 262144
$ f- v$ o8 ]( o$ a8 l8 D1 w6 i' U每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。- W/ g q6 O5 f H. x# \( h N1 H
net.ipv4.tcp_max_orphans = 262144! o* @5 c5 L& Z/ t
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
3 Z8 X# t7 {7 b1 ~% a0 [- R! \印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
w* {, J2 @8 v% u, z. d2 [# O5 p( @(如果增加了內存之後)。. |9 |- N4 y" W& m+ Q. ]
net.ipv4.tcp_max_syn_backlog = 262144
: t8 o8 |+ |& k' m: G( X記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
3 |5 J# u" v# q$ m統則是 128。3 e. D9 |) P Z7 k$ B
net.ipv4.tcp_timestamps = 0
; i U- Y- v) K9 N' e, C, Z) t- Q時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
! b8 {& k) h% f) b5 O數據包。這裡需要將其關掉。. Z0 l% [! Y4 G
net.ipv4.tcp_synack_retries = 1
' _& C& s6 @3 f* G* r為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次3 q6 C, @7 L8 l, J" |/ m
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
/ P" s1 G; }9 `6 j. ?net.ipv4.tcp_syn_retries = 1
, }# ^* K4 m1 i4 n1 E$ J在內核放棄建立連接之前發送 SYN 包的數量。+ K! S& u6 x% I- f, |* x
net.ipv4.tcp_fin_timeout = 10 Y K& l9 o& H, s# F% X$ F
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚0 D6 x, h: }7 j! r" o- c
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕
. v M, R+ \: A M載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最7 w4 t3 l5 Q* l; o- Q6 N
多只能吃掉 1.5K 內存,但是它們的生存期長些。! t: r$ ^4 r8 a6 z! U% I) E
net.ipv4.tcp_keepalive_time = 30
& F& A1 x0 c; \; h當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。! c; t/ i8 U ^* L
% r6 J. N5 u0 Z3 f/ A% F4 |+ a X$ i" O# G* n4 ~
下面貼一個完整的內核優化設置: a. T" M8 r. w1 M! E0 S
net.ipv4.ip_forward = 0' E! k; A3 d! \6 Q# f, e
net.ipv4.conf.default.rp_filter = 1
* K m8 [& q+ v. c e3 Tnet.ipv4.conf.default.accept_source_route = 0
2 i+ G4 N, P: M4 akernel.sysrq = 0! ~1 h2 Q9 f0 A5 B6 h8 X
kernel.core_uses_pid = 1
4 ?# G$ Q( z/ I S @1 I Pnet.ipv4.tcp_syncookies = 1
0 j; G% O. N2 y. Skernel.msgmnb = 65536
$ ^: {+ m) h. c! J {" Kkernel.msgmax = 65536* }9 V$ p! E; v d/ ~
kernel.shmmax = 687194767362 f# p' y) F; [
kernel.shmall = 42949672965 ]. e9 u5 f' O9 J2 Q
net.ipv4.tcp_max_tw_buckets = 6000; ^) C/ [: O2 t
net.ipv4.tcp_sack = 18 w7 x) j# E, v) q' P* E& o
net.ipv4.tcp_window_scaling = 1& g- P7 I ~& a* m, \! d
net.ipv4.tcp_rmem = 4096 87380 4194304' g6 `' j5 h: M% W! y E2 W3 k
net.ipv4.tcp_wmem = 4096 16384 41943045 j [% g5 b$ P
net.core.wmem_default = 83886081 T8 _) @9 t- M1 G6 ^+ L6 e
net.core.rmem_default = 8388608
- f" J; g# [) y+ qnet.core.rmem_max = 16777216( X& z+ x! O9 G4 x
net.core.wmem_max = 16777216
/ c" j. D7 t# ?, L0 Gnet.core.netdev_max_backlog = 262144
2 x$ d; _6 e$ h4 d5 Y3 t& N* Vnet.core.somaxconn = 262144
0 s# Q. g8 M: Z8 M; M- qnet.ipv4.tcp_max_orphans = 32768001 G V3 W; X7 m: l) T+ M/ Q
net.ipv4.tcp_max_syn_backlog = 262144 k2 l* X/ u0 X9 v- Z+ \
net.ipv4.tcp_timestamps = 0
. e3 @- r2 f! jnet.ipv4.tcp_synack_retries = 15 b5 o6 r, ~$ R! ^* M& ]
net.ipv4.tcp_syn_retries = 1
; i D" T( n+ T4 V3 h# Dnet.ipv4.tcp_tw_recycle = 1+ b. `$ F x2 G0 i
net.ipv4.tcp_tw_reuse = 16 x' l) R! q G: A5 K. K
net.ipv4.tcp_mem = 94500000 915000000 9270000000 w* d8 T& a) A4 ?* V1 ?$ M/ P
net.ipv4.tcp_fin_timeout = 1
! ]; ?5 v! Q+ x) [0 [% x- U# ?4 onet.ipv4.tcp_keepalive_time = 305 |( @0 f7 U) J! O% V# B
net.ipv4.ip_local_port_range = 1024 65000
5 ?% @+ }1 B3 E+ H' M9 h3 Z$ O
; |" {4 e, Y# h' P; a0 ~8 G下面是一個簡單的 nginx 配置文件:nginx.conf
& P5 I" f( Y( j" e( ruser www www;
5 d" j: l# D0 v% h* v: A0 y* cworker_processes 8;
$ d/ v) a6 h7 f$ sworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;3 [/ W. C& i: R( S8 s, ^2 l5 t
error_log /www/log/nginx_error.log crit;
0 z" j- g7 K. [, U! J4 W" ?( Npid /usr/local/nginx/nginx.pid;
) ~" B" Q% L& k6 ]8 s1 yworker_rlimit_nofile 204800;
$ W# N& V, c) z" V7 d+ z. Vevents
& Y! z6 v( O1 _# I( I! M9 K) S{
% f8 W+ k$ A+ R5 U use epoll;1 {& v8 q$ x* B% U. q
worker_connections 204800;. A$ V6 Q+ Z0 D( y% [, M
}( @$ D, j& u6 h7 a" z
http$ a3 h' \5 W& M" l; O( k; |
{8 r8 Q4 L' f3 j3 W- {
include mime.types;
, v7 w* W, x: o [: z- O3 E% v: r default_type application/octet-stream;
2 C1 T* |. v( ]1 q6 m6 l5 O2 V- L charset utf-8;" {. k: `5 U' |# J1 S2 B
server_names_hash_bucket_size 128;
( [* Q' H* D r5 N client_header_buffer_size 2k;, y5 q8 F3 w' `4 L# v" M2 `
large_client_header_buffers 4 4k;9 t1 x: f: L; q; s4 [7 Q6 C
client_max_body_size 8m;. I, J& d# ? z+ T5 v$ Z7 e4 j
sendfile on;. @$ X3 A+ d5 T0 I# j$ N
tcp_nopush on;
' X0 K# {, e7 n3 V1 p' g2 R keepalive_timeout 60;
) |+ [4 I8 s8 J J q9 q fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
1 v% ~7 Z: i, Q fastcgi_connect_timeout 300;1 M9 H9 |. H8 Z8 S7 E/ {+ d
fastcgi_send_timeout 300;! y$ i: X" h% d! E" e) Y: o5 t
fastcgi_read_timeout 300;
. Q6 O: A7 k3 \* G5 T7 m4 B" C fastcgi_buffer_size 16k;( t& S2 E" M0 C% w! r( S
fastcgi_buffers 16 16k;" _/ B" r; d3 ^# w' X
fastcgi_busy_buffers_size 16k;+ M7 Q3 Y. a; d+ R5 t4 E8 U5 ?
fastcgi_temp_file_write_size 16k;) `, @& s8 o, D
fastcgi_cache TEST;$ Z6 j" y( T: Z# g* A
fastcgi_cache_valid 200 302 1h;
4 Y. v+ W. I! L4 u; R fastcgi_cache_valid 301 1d;& t5 r a. O: P. Y3 Z4 d
fastcgi_cache_valid any 1m;
& M5 O! M; L* W% H' }+ X/ a. p, j fastcgi_cache_min_uses 1;% f1 j# I5 {7 x+ x L
fastcgi_cache_use_stale error timeout invalid_header http_500;
1 n5 v: S2 k; N/ y9 z9 s8 S open_file_cache max=204800 inactive=20s;9 Z1 y! }5 s9 B8 Z
open_file_cache_min_uses 1;2 ^3 K" `8 j U* h! j5 v
open_file_cache_valid 30s;
& @7 m3 s4 @) e tcp_nodelay on;; T6 O! T( u, i
gzip on;! }4 x. s9 V; v* F. m: ]5 P* e# f8 N7 R% V
gzip_min_length 1k;; m: Z5 x$ G' P9 h
gzip_buffers 4 16k;7 i( Q" b$ z* D" C5 ~
gzip_http_version 1.0;2 {0 B! F- D! g' D: }) }( K
gzip_comp_level 2;( B6 i1 N# b; _
gzip_types text/plain application/x-javascript text/css application/xml;% e' S/ o! _! v+ \0 m3 ]8 Z+ {2 e
gzip_vary on;
: m0 P$ L* K/ k) J* d! ~ server7 P, N0 \8 C: M8 i3 ?" s, n3 y
{$ t3 ~& Q* @- d9 \6 {
listen 8080;8 [4 `2 H# F+ f/ T1 {) O6 T
server_name backup.aiju.com;- F+ |" A. A/ a3 N, G( M
index index.php index.htm;
: I1 o% N4 G( J1 h) C root /www/html/;
' N& b/ r" p: x2 ~2 E) g location /status
! `1 I! ^: P1 i0 M3 O7 m {* B, [* h1 n0 p* X3 Z. _
stub_status on;) F5 W3 N9 m' ]
}
( [! s C2 T" |# h location ~ .*\.(php|php5)?$
6 K$ f: V" {" F' I# _ {( G0 {8 x: m5 C' ?! \7 W' o
fastcgi_pass 127.0.0.1:9000;
5 k7 P, C/ N' E5 ]6 w* _- F fastcgi_index index.php;6 f3 S' V3 {- _5 _3 f
include fcgi.conf;7 u4 i* @) `: q; D
}
6 q( r/ h, ^% A9 L' u( T! T location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
7 W) A& O1 ^( H1 C6 \* ?# T3 I {
( r7 A% [5 R$ _# T3 w9 ~8 E expires 30d;
$ E. F, M2 T' x J0 d2 F }
- [* R [2 Z, \+ @ log_format access '$remote_addr - $remote_user [$time_local] "$request" '- S: r( }: V7 p6 ~3 b$ q4 O$ I9 e% o) }
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';7 }* U# o% c% Y( ]# v- |( i W& r
access_log /www/log/access.log access;
5 i, X& b# o" a3 w" B4 ` }7 j) k. b: \( ~9 u% W2 K6 d# {
}
3 W1 U3 I5 \! {
' W: X q1 R2 A關於 FastCGI 的幾個指令:
5 V5 Z; F. [1 V/ S5 [$ Jfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
+ s2 D* Q' A q* ]/ H這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。2 g5 X9 ]2 k, Y9 |
fastcgi_connect_timeout 300;7 D; g/ }! `# Z1 k
指定連接到後端 FastCGI 的超時時間。' p" d0 h s/ y/ d2 f- o1 {! @
fastcgi_send_timeout 300;
- x3 r, n& o0 X# x* M2 ~+ a7 c向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。7 Q& q: s- X. o- Q) U4 i
fastcgi_read_timeout 300;
; i; P8 c& M5 I* n/ Y接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
8 `' m/ b' c6 E4 P% G$ yfastcgi_buffer_size 16k;
" K1 W2 T; t* t; w- i$ q6 ^指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
0 z3 ^/ _, }, g$ q! m指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過) Z4 R6 ~, g* p
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
) V$ ~" i. A' R/ {% w/ J小去緩存。
1 q4 U6 i5 c7 R' J/ }/ i6 K2 G0 sfastcgi_buffers 16 16k;1 d( l) m/ w- t
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,7 F( C: }7 G0 h3 o) k
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,& M4 K, X0 v: J! T+ A& o: p1 X" f
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
" I- K& b- m6 w0 J4 b站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
+ P" h! I* [( v# d ~; Z置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
; n7 P+ F% Z `1 C64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
6 V$ a5 u. X! c5 S; A" ?會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。( l5 m' R0 C \
fastcgi_busy_buffers_size 32k;
% C2 |; r8 u5 d6 e2 R x o這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。" Q. h9 @% \" |4 a I2 J. e
fastcgi_temp_file_write_size 32k;" x2 G _' s# |6 y, x$ k* F8 z8 m
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
: r+ G( R, E" T1 e4 \fastcgi_cache TEST
3 q4 Q, g6 [4 N: z4 B# S: F$ y# F開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。; d( A1 ] d- }; b7 |
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。2 h8 F7 t1 S$ D7 R# W. e; Z
fastcgi_cache_valid 200 302 1h;
/ \! u* n- C# T0 }. C% afastcgi_cache_valid 301 1d;
/ N) ~$ U; D1 z1 x+ U: Jfastcgi_cache_valid any 1m;
- k1 _- b& V# G* n" Y$ P' V, ]為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。
9 a0 U; u* u. {+ J. l S6 f4 jfastcgi_cache_min_uses 1;
9 L* e9 g8 F' E7 m4 h; N9 u$ k k緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被4 K% v* q. }- C6 Q* t
使用,那麼這個文件將被移除。
6 B1 J) H( Y1 F, pfastcgi_cache_use_stale error timeout invalid_header http_500;
$ t$ x# @2 Z$ Q不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
& _" ?# P% e# L2 B5 J( h以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理0 |8 [; r3 r( H9 ^: }
FastCGI,可以修改配置文件中的以下值:9 G2 K5 f* l* v$ U |8 F
<value name="max_children">60</value>
- b% ]. ?0 ]. g" Q同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。 v6 M3 Y3 S( Y7 n8 w$ X
<value name="rlimit_files">102400</value>1 I; x, }6 b: ~* h$ L
最多打開文件數。
' k E5 l4 u2 u d, W$ W<value name="max_requests">204800</value>
4 X: n3 ^2 R' D% _; s+ C每個進程在重置之前能夠執行的最多請求數。
% d' [- o* m9 a" W( h! z* r
1 d- M0 S" ]6 \. e7 D- L4 r
; L2 P P4 |- M% t: c參考資料:5 }' H: S' g2 j: z; M8 o; Y
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
5 K0 n! {5 C& B0 d! g% |- F- bhttp://blog.chinaunix.net/u3/105004/showart_2087155.html
) ]( F7 M, Q$ c& Z. J$ A4 w2 _http://nginx.179401.cn/
9 y% ]! p1 ^+ K. b- q, b6 N- [8 {. shttp://blog.s135.com/nginx_php_v5/# w {: g% C3 ~4 q- t1 k
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
. `, U6 J" \1 shttps://www.netroby.com/view/3128
7 o- G0 E# G- ^' M9 ~. rfastcgi 快取:) {5 b5 I8 Z0 e0 ~! t
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
" f# \0 E1 [' a3 w' ?4 t- y其他:
/ f V' `" \& I! q) E8 m! ~nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
& {* W! M6 |# ~& {nginx優化:http://www.jianshu.com/p/2184654ba4b2
9 `, S/ Z$ D4 y& P' P0 jgzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on9 w5 Z6 Y- k$ C% q* A. `/ t# _
% L. M2 p6 x# y4 @& y: V( \
* V# `0 }7 x4 {% i# n+ T. A. T, \/ T
; Q. y7 E, `8 Z; R5 K
|