tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
* v5 s" Y v [& V一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
9 e' i# L" k: u% p0 aworker_processes 8;
8 E( i3 D: D5 s4 O4 ~! lnginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
" l8 p0 b, M* J; U1 Z% i* Yworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;7 E$ A" U/ \! `1 }$ \
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。+ e5 U" U! p# s/ X. l. D+ d6 z7 l/ o
worker_rlimit_nofile 102400;
* h# V# f) ^8 C4 L3 v這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數( C8 B$ T+ ~5 p1 v/ C
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。- h/ y3 d) @# R6 z7 g
use epoll;
/ {& N1 K6 J, O' E# |使用 epoll 的 I/O 模型,這個不用說了吧。
* L: Y T& B8 ?: H R Nworker_connections 102400;8 m$ _% E% w8 O1 R
每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。6 H! `) y, H3 f: e- I
keepalive_timeout 60;
, {1 M% T+ C! ]# `# _+ i& r+ Okeepalive 超時時間。0 N. {5 k/ {8 W2 G& _, _* S; W6 T
client_header_buffer_size 4k;
1 W) R4 Z% y4 v7 k客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由7 P4 s4 ?; d7 A6 t
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。+ |% ?9 W" m7 ^( `
open_file_cache max=102400 inactive=20s;) \+ J7 {7 t% W* B' H
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
5 @; l: @0 b) d間文件沒被請求後刪除緩存。! P7 z7 t4 o4 L+ G6 J% p1 ?1 i
open_file_cache_valid 30s;0 g, m% N& F& ?, I% w6 ?" O# _ X
這個是指多長時間檢查一次緩存的有效信息。
0 `3 n, n3 k4 Copen_file_cache_min_uses 1;4 q% s8 u; N7 y) F0 u4 K: U) D3 C
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打
( O) ^! K* w* c6 _, w開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。; ]- O* b: { E9 h
3 W) E# K' e1 s- g7 j3 C' U
% E0 w$ m& C4 s5 y
關於內核參數的優化: B r/ D2 @8 c* c: H. |# k
net.ipv4.tcp_max_tw_buckets = 6000
' F5 S A' ~+ A' N5 X; j& {timewait 的數量,默認是 180000。% R5 J+ Q1 c# |# Q9 r# v0 t
net.ipv4.ip_local_port_range = 1024 65000
9 x* R2 E5 d0 D; |1 A) U& Q1 n允許系統打開的端口範圍。0 d+ Q3 u+ ?) b
net.ipv4.tcp_tw_recycle = 1
! Y5 O. O+ O. ]: s# Z5 L7 [/ p' \9 \5 I啟用 timewait 快速回收。! w& F; u8 ~/ x L/ B2 S% {
net.ipv4.tcp_tw_reuse = 1+ I) T. N" Y* t
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
. a R. R8 S9 J; R, D/ Knet.ipv4.tcp_syncookies = 1
6 v+ _4 [+ {* Z. D5 p* B& G; x開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
! D0 g$ r8 ~+ |# k4 x2 n1 dnet.core.somaxconn = 262144
) W, {, D- G# g& t* D: k4 tweb 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的, C0 [2 {, ^! g' D1 ]
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
$ V9 S' }0 f4 tnet.core.netdev_max_backlog = 262144. C. r/ Z0 G. F( N" z8 D; b; x
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。$ S& H1 M3 i z4 r
net.ipv4.tcp_max_orphans = 262144! O5 p$ O) x) k4 g$ }
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打/ ?7 G: O8 I3 q$ v
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值, L4 A# P6 L1 r* C& i. \8 R
(如果增加了內存之後)。- S; x* B' d0 u9 J8 q p2 m
net.ipv4.tcp_max_syn_backlog = 262144
% R' _) `; f/ n( Q% T8 }7 X記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系9 f1 u2 V: g! D- f
統則是 128。) _, ?5 X9 B. y3 {* L# h
net.ipv4.tcp_timestamps = 0) ~3 ^. I# r$ y: y0 X W
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
6 U- ]( s3 Z$ ^4 q& j, ^ p數據包。這裡需要將其關掉。# I* R5 K7 O# v/ D N
net.ipv4.tcp_synack_retries = 1/ j9 \& L$ ]6 b/ Y$ {! B. R& e% z
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次5 q+ j& I; |% D/ r1 A/ c0 b6 M2 o! O
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。; ] k# C- d9 W" N8 l
net.ipv4.tcp_syn_retries = 15 r" W; H: }9 y+ Q. b
在內核放棄建立連接之前發送 SYN 包的數量。, f" i2 K. N v/ u+ Q/ u$ C0 l0 L* W/ B
net.ipv4.tcp_fin_timeout = 1
, d3 L( F! m% t4 u如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
/ f$ b) _1 n+ M至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕2 p% X: @7 Z3 P+ t( y
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最. U! z! w$ R$ m5 T. B1 S/ p
多只能吃掉 1.5K 內存,但是它們的生存期長些。
* |, j6 {) m$ x8 ]/ J# Xnet.ipv4.tcp_keepalive_time = 30
9 S- Q- a( ^# _! r" w8 E當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
8 q7 E$ @! C( a; E. Q# p& u
5 ^" n, w: h$ i& J5 I% F& M) R: f2 O3 L& C2 j& l
下面貼一個完整的內核優化設置:, @1 M3 Z- c- j8 h* b! y: Q
net.ipv4.ip_forward = 0
- p0 y9 s F! X3 e4 J) Z. w( tnet.ipv4.conf.default.rp_filter = 1
$ w" M/ t! h+ `- P. k% z4 Q# Fnet.ipv4.conf.default.accept_source_route = 0. O1 C) l$ _- K1 W: M
kernel.sysrq = 0, ~/ p7 ~" n7 p" Q
kernel.core_uses_pid = 1
) F* ]9 s$ p3 S* W' D& L( gnet.ipv4.tcp_syncookies = 1- q3 C5 d2 f; V, z, a
kernel.msgmnb = 655367 j& T/ u- f2 n! s6 `
kernel.msgmax = 65536
# ]% K( O! ]* Qkernel.shmmax = 68719476736
* y f6 J% y$ akernel.shmall = 4294967296
! ~- k& P" I e0 x( t. anet.ipv4.tcp_max_tw_buckets = 6000% v, ^$ L9 H# k( P. ^' Z9 A
net.ipv4.tcp_sack = 1& b- b# ]* e: G0 I9 ]
net.ipv4.tcp_window_scaling = 1# J L0 [9 G6 y1 Y
net.ipv4.tcp_rmem = 4096 87380 4194304
# g" F, T2 g- l5 i& q Q8 Qnet.ipv4.tcp_wmem = 4096 16384 4194304: w% L1 @& U' \# ^! f
net.core.wmem_default = 8388608
& p4 ^1 Z' F1 l3 H" wnet.core.rmem_default = 8388608" y5 g1 ^, G2 \; R# I$ h
net.core.rmem_max = 167772163 u, z: {; y" \5 W" E
net.core.wmem_max = 16777216. C" \" y/ T- p9 w5 G9 ^2 _5 K3 [# L
net.core.netdev_max_backlog = 262144. q( x/ Y4 [1 y0 I* d
net.core.somaxconn = 262144
# \% y- Y: ^3 u, n. y+ s4 Vnet.ipv4.tcp_max_orphans = 3276800% _* ~& G# ]3 \9 V) ^8 Y
net.ipv4.tcp_max_syn_backlog = 262144
6 ^/ `6 _5 o- M4 s' x( M: snet.ipv4.tcp_timestamps = 0
' _7 L; F B, G1 G. xnet.ipv4.tcp_synack_retries = 1' S8 n6 D9 R- ]! L# B
net.ipv4.tcp_syn_retries = 1# k* W! n* l8 }6 l
net.ipv4.tcp_tw_recycle = 14 s* _& ?( Y7 Z, `8 z1 J; k" l
net.ipv4.tcp_tw_reuse = 1, M7 l& m& M9 v4 ~; l/ }
net.ipv4.tcp_mem = 94500000 915000000 927000000
' t3 V6 R y1 n C( i+ U% nnet.ipv4.tcp_fin_timeout = 1% q' c- J) u$ q3 V. V7 X, D( G
net.ipv4.tcp_keepalive_time = 30* L* K3 o. X& B. o; y( z
net.ipv4.ip_local_port_range = 1024 650006 ^: U7 }& R7 O* J. W+ g* |
# x' y: i: L* ~3 A; s- i7 j. ^" F$ l
& M" Z+ m. q$ p$ B: R7 P' w: `. ~* x下面是一個簡單的 nginx 配置文件:nginx.conf
4 }' m0 c+ `' G1 M4 u- ~" \user www www;
) p# ?% \9 w1 \: g( eworker_processes 8;
& ]+ b# u9 I5 ^1 W, Rworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;2 `% |: R5 I& ]; F
error_log /www/log/nginx_error.log crit;5 G1 v5 \9 x* ]( c3 M4 O
pid /usr/local/nginx/nginx.pid;9 ]9 w" r, d. b1 S% m
worker_rlimit_nofile 204800;0 P* o2 w4 {8 U W7 m
events
/ Z6 V! u. a& S) W7 V{
& U$ @8 }4 U6 t" V" T7 a5 @ use epoll;8 \/ f" L H' B8 b9 L5 s0 \
worker_connections 204800;( X( a7 r& @( h- B
}- Q$ @* P+ j! `
http
1 a. _* i8 q* u0 x- G5 E. K# S{
# [0 C; P: D* ]2 f' J- o. x }. Linclude mime.types;
9 ~9 {) i Y, w( U default_type application/octet-stream;
1 y0 t8 }: T( f5 M% b5 g, D/ o# t charset utf-8;
+ z: `1 i' C) o2 r. R server_names_hash_bucket_size 128;
( p5 S* Z9 ^( _) i5 [4 N client_header_buffer_size 2k;3 V1 u1 N& K! I: N: w
large_client_header_buffers 4 4k;3 x% I* i$ s' x) \* p- s: `
client_max_body_size 8m;, C Z( |1 i2 g" j
sendfile on;
0 [0 w; ]/ h6 x1 a& B/ Z% U tcp_nopush on;* ]! x+ ]2 ?' B/ q8 s" Q
keepalive_timeout 60;3 [4 l# l8 u& O5 y7 s+ c" W2 k7 m
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
z \6 {# e2 B+ W3 \9 p- B4 i fastcgi_connect_timeout 300;2 ]4 a, e' l7 ^$ ^3 p
fastcgi_send_timeout 300;
1 q1 y# M* T0 n" R fastcgi_read_timeout 300;
2 w; a- |9 j: n1 K3 M fastcgi_buffer_size 16k;# _% e M+ }% i4 M9 R6 x
fastcgi_buffers 16 16k;+ }' C3 }. S8 M N
fastcgi_busy_buffers_size 16k;. u7 w4 l( w5 S; ~' D j1 _7 U# a1 l/ E
fastcgi_temp_file_write_size 16k;( R0 J! g& o+ s* ?/ \
fastcgi_cache TEST;
7 T! j% {4 z# v) I fastcgi_cache_valid 200 302 1h;
- c1 P1 j* E+ s6 j* z; B( p fastcgi_cache_valid 301 1d;7 t, q6 C: ?8 M1 Z" X% M$ o
fastcgi_cache_valid any 1m;
( V, Z j& F2 A; q8 ~: X; ` fastcgi_cache_min_uses 1;
& s2 A. f4 n0 P6 \' }6 i( I fastcgi_cache_use_stale error timeout invalid_header http_500;" E* r# i) ` W
open_file_cache max=204800 inactive=20s; T5 u0 g, U9 o2 R8 l8 @
open_file_cache_min_uses 1;; r" I7 V& `2 [0 [ b
open_file_cache_valid 30s;
4 H4 ` {3 e9 f5 O tcp_nodelay on;5 }9 |# \+ ^7 j
gzip on;
5 }( @8 V/ c" N* {8 H6 i; e gzip_min_length 1k;/ L( K7 m9 T+ @7 x; p0 N
gzip_buffers 4 16k;
3 i; @ L( d) ] gzip_http_version 1.0;
& z9 j6 O" O" h gzip_comp_level 2;
; J( D; c% E% N* U$ B0 {2 d gzip_types text/plain application/x-javascript text/css application/xml;
& W, l/ l/ L5 ]2 C% j1 G& d) V gzip_vary on;
- V5 c7 A5 C# G8 o! P9 Q M! P server8 S: m' j& l' N" K# b3 P( h1 R
{. d1 }( e8 C6 N" T+ f) X0 o
listen 8080;
- Q `+ r" W; D$ `( K# { s2 l0 S server_name backup.aiju.com;- Z3 Z) j, ~# C3 T, ]& M% x
index index.php index.htm;
9 A: ~ g( e) K: T% n# L" y root /www/html/;1 J# o9 a* M+ X' }5 w+ C# [' g" {+ A
location /status% p% l) A7 W- h/ t* n5 V: m0 h; S0 a! ~
{2 @0 T8 l' y5 P- @1 r+ a
stub_status on; o( B5 R) m) J7 K7 _% S: X
}* e5 i1 e5 p5 ^6 S
location ~ .*\.(php|php5)?$
) c0 l1 d6 `9 j; D! v' j& n3 `5 H {
' I5 h3 ~; s- k fastcgi_pass 127.0.0.1:9000;
% D3 w2 ]) \1 J8 {% O* I+ c fastcgi_index index.php;
# s+ y o/ `, x5 r: k' s) ^7 _ include fcgi.conf;- g1 r+ g m( Y3 \$ ^7 K2 |
}+ Q2 l5 [2 S7 b2 M+ A- r( `
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$1 E9 n; B6 h2 |
{
. c' W0 J4 ^0 k; Q& c4 y expires 30d;
* B0 [( P: t* K, \5 }4 x }4 Q! s1 p. A Q4 m9 V* h
log_format access '$remote_addr - $remote_user [$time_local] "$request" ', e3 V6 Y, b+ z. n! o6 J9 n$ Q- r
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
9 @3 E l8 X9 T4 ` access_log /www/log/access.log access;( V# _1 W; T' h7 d) u* `
}
% N& P2 S9 J4 d) Q' n! v4 Y& M! Y0 i' S}
$ f6 X1 Q% V+ h& h% Q
/ p0 ~) n/ w0 r! }關於 FastCGI 的幾個指令:
0 B9 A2 {4 V0 L8 K/ X3 ]% D( s4 X. xfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;8 y7 N* V! |; [4 v" i& i
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。# `2 f8 E* X. J& S/ D7 Q& K
fastcgi_connect_timeout 300;. A+ l) J2 i& }$ q
指定連接到後端 FastCGI 的超時時間。
U& O# ^$ c" ]; v* _+ K+ `fastcgi_send_timeout 300;
1 b3 Q9 j; a$ r+ e) `6 b向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
! R4 m) j0 T# `; D7 j# g: F, sfastcgi_read_timeout 300;
) Y. L4 g/ S/ m3 [7 k/ f接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。( y0 s4 ] I1 d+ H& F1 ]8 @2 W- J
fastcgi_buffer_size 16k;
+ U( _. z4 `- l3 d; E指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
) K5 `( [: ^5 O) @# p( e1 p s5 {指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過3 n6 M: x2 T) k4 o; x: q- Q
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
4 L" J6 ^$ h+ y2 Y小去緩存。3 N) t8 ~; R# k+ Y) ]8 I* q% k
fastcgi_buffers 16 16k;
% Z' c) v6 q u" j& h; p) v$ ~指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
% ?, _3 H+ D- D則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,- U7 _+ H1 m7 X& B: O/ U
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的4 j4 \6 Q0 N# S- y
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設! S" u+ o; o) } @( P3 Q
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
# c/ o: J( i1 R# y64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
i l8 X3 p2 I. h- p會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。 f- _6 x! Z* h+ `
fastcgi_busy_buffers_size 32k;
* R% b/ [. i+ ^1 U# G. L% b這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。. D8 A/ e0 M7 S0 m# k8 f3 S
fastcgi_temp_file_write_size 32k;3 Z2 K A! H' I( z0 W% i
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
/ k* `4 P% u' r, Q6 w, D) ufastcgi_cache TEST
7 R$ T5 Y u- E開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。* e6 A9 X6 O$ Q% i. D
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
9 w! b' y$ d5 r+ S0 T& tfastcgi_cache_valid 200 302 1h;6 g3 h4 }' d& U/ c8 `; o) ^
fastcgi_cache_valid 301 1d;
, Y" a* L! s ^% Rfastcgi_cache_valid any 1m;
, {5 k: l4 ]. `$ c; p3 z& j為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。 N2 ?6 X, ^9 C$ ?; k E
fastcgi_cache_min_uses 1;* r4 d: x5 Q, i, p/ F. l( V) {
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被
/ @) U; L3 t, }4 U: \. j" S T使用,那麼這個文件將被移除。3 I, D$ r& e: Q, x/ C
fastcgi_cache_use_stale error timeout invalid_header http_500;
: g- @$ ~5 @( b7 |, F- s& h不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。! ? P& a* b5 @" e7 S0 X
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
! ^7 y5 _" r' I, t/ b! e) _) X6 pFastCGI,可以修改配置文件中的以下值:/ s \1 Z4 Z& z' @
<value name="max_children">60</value>6 |/ _. G+ d2 e* M6 u
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
9 n, R0 X+ a, P3 k0 v) \5 b- J<value name="rlimit_files">102400</value>
2 |: t- M2 c! d8 D! c最多打開文件數。" X: h' T u) i; E
<value name="max_requests">204800</value>
0 v! ` z0 y2 S" ]( `每個進程在重置之前能夠執行的最多請求數。
7 X4 V' B1 ?$ Q! B
* Y% m9 W. I* P0 Y/ |( t0 u I8 E/ y; [% D( W& n
參考資料:
: G! _* U+ s0 d, n+ phttp://demo.ckan.org/dataset/daf ... /download/nginx.pdf
$ k3 U! S6 l" h) i# V& n+ ?# khttp://blog.chinaunix.net/u3/105004/showart_2087155.html
; j6 E6 G$ z5 G9 h$ F4 ]0 n yhttp://nginx.179401.cn/7 p& ? q' t. m. Z. x
http://blog.s135.com/nginx_php_v5/
% _% f/ I: u! L: c- ^) rhttp://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
6 `) a7 k* ]" n, ]https://www.netroby.com/view/3128
) h" ? }+ O# v/ a/ X0 Ofastcgi 快取:
! E3 r& B( w( q1 b4 p2 n+ Lhttps://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
7 X3 H9 K1 D1 Y5 x4 ]+ V其他:5 M& X$ t& p3 d
nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout: k. @1 Q- F4 ]2 l8 E3 a0 w1 y
nginx優化:http://www.jianshu.com/p/2184654ba4b2
3 y( x. _" f3 H0 x$ E- x) M; ygzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on. _. N& J: e7 J. ~0 q; Y( ]
8 } j) e4 F8 E, u$ N0 K2 s
6 }2 t) P% [- B/ Y: [, d0 p6 W% Y* y" {2 M2 Q
( g \* s( D3 v x |