以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf; s0 h( o2 O5 J: g; ^3 o3 S O
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
% W* S. p% A$ C& {; |2 zworker_processes 8;
: D4 K+ s* a& Xnginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
! e5 \9 z8 R0 Y5 R& T6 }worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;' I/ W5 [( i: c" n* a5 h+ A) m3 P
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。( b8 {5 R- _$ }/ z" x, f. Y& {
worker_rlimit_nofile 102400;) `, r! c2 k/ _5 a$ m- I
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數7 w B( C1 v: B5 M
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。1 T& o" `: [/ B% o; C+ C! M# L, }
use epoll;5 k7 M2 Z9 h! M6 U1 H
使用 epoll 的 I/O 模型,這個不用說了吧。
' g$ Y& d( s; O8 p$ S3 rworker_connections 102400;
8 K7 V; U! l0 F9 j# u6 ?每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。 F- {8 e; u7 M: W# e! {. G
keepalive_timeout 60;
) v# m9 h" R% N2 n' c X( `keepalive 超時時間。6 @7 r {5 E/ ]2 Q: c
client_header_buffer_size 4k;
0 r1 |' q6 x" e2 K# u( ]客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由/ L* L/ Q% S3 N! D$ f
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。6 N+ {3 h8 [4 {$ O7 k+ g
open_file_cache max=102400 inactive=20s;4 Y8 D9 c4 _; i
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
4 c3 F& b- t" [/ H6 T7 b4 D3 s間文件沒被請求後刪除緩存。
) B3 v0 Y6 a8 [9 `+ iopen_file_cache_valid 30s;
2 X. ^4 W! J# S6 Z這個是指多長時間檢查一次緩存的有效信息。
- O( @; P/ \5 I5 Ropen_file_cache_min_uses 1;
' a- `4 {7 s+ E. m; Q, `2 popen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打0 R; S7 r3 F9 b. z u- G
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。: c8 ?; @9 U; G: U! o" l* w' z
0 D1 s5 `* u& x9 |$ d. B
0 h/ P7 H2 n: D( P關於內核參數的優化:
* g4 g* s5 O% }# ~' b% anet.ipv4.tcp_max_tw_buckets = 60009 j% Y( _ m: l
timewait 的數量,默認是 180000。
2 r. l% Y1 u& o9 ^net.ipv4.ip_local_port_range = 1024 65000
# h' g* N: X, P允許系統打開的端口範圍。
2 ?$ ~4 Q3 B% pnet.ipv4.tcp_tw_recycle = 10 o9 M; `2 @) U2 h4 F
啟用 timewait 快速回收。2 R7 L6 z; o9 u6 @5 h
net.ipv4.tcp_tw_reuse = 1
$ W7 i6 Y* o8 Q1 l7 z開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。! q& e& b4 C1 u3 `8 l- l. c0 N" [1 _ b% w
net.ipv4.tcp_syncookies = 1
* z. x! P2 \$ ]) _5 b7 V開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
; N8 l1 l' t; g, Dnet.core.somaxconn = 262144
9 b4 v) Q( a/ ~web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的0 B# G3 y8 a" n- A
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
$ _: k& B$ ^# ]& F, ~" }, }2 @1 ~net.core.netdev_max_backlog = 2621446 ^1 o( O: {4 h& O, A% ?
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
) L" A; ~# ]& S( g; D7 }0 y+ Qnet.ipv4.tcp_max_orphans = 262144% Q8 U. E2 r. z- e+ v0 N
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打" }3 B S; D. \ p+ p9 B& J P8 I
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值) Y7 X# T. W: ]. y/ }; }4 y3 e
(如果增加了內存之後)。$ D( x$ k2 E: U% R
net.ipv4.tcp_max_syn_backlog = 262144
+ k$ M m1 m# Z記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系: D8 J2 N. T1 a5 o
統則是 128。2 S$ Q3 B3 `, I
net.ipv4.tcp_timestamps = 05 u0 }( V5 i1 Y! a) t! v
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的- z/ b3 h( H% A5 J% K: J7 c: E
數據包。這裡需要將其關掉。
3 [7 p% {: n' B/ J1 Unet.ipv4.tcp_synack_retries = 1* Y$ @1 @1 G7 Q2 E1 n! c
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次) B- _& t- U1 a; S' V& l+ H
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。' I5 \8 o$ ]% A: p x' G2 n& J
net.ipv4.tcp_syn_retries = 13 G3 J+ Z4 `# H3 m2 j: g0 C
在內核放棄建立連接之前發送 SYN 包的數量。
5 w0 X+ V$ H1 Q6 u7 v# dnet.ipv4.tcp_fin_timeout = 1, G7 b& K. M) K" G. v( C
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
5 S5 b; B; ^" K5 P6 F, k& G7 D至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕9 U& Q/ s: y" s y. K% P" b& ]) T
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
* D/ s; e0 m9 Q. Y多只能吃掉 1.5K 內存,但是它們的生存期長些。& N- {7 Q( x4 R- |# n) D& D; `) V
net.ipv4.tcp_keepalive_time = 30; ~" k* Y6 }( o4 l4 S( ^
當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。. I0 l0 S2 y4 A7 z
6 ?8 e4 O0 b8 ]; x$ c% e
/ j" q% T9 c& s/ z3 ?9 J下面貼一個完整的內核優化設置:
5 `/ f( s' }- k# T. g& z" R/ Gnet.ipv4.ip_forward = 0
8 T) H: A- ~9 wnet.ipv4.conf.default.rp_filter = 1
0 J ]& h/ q7 A4 t! Lnet.ipv4.conf.default.accept_source_route = 0 ~; A/ S$ H6 J) _* Z) _2 ^, b( g" r
kernel.sysrq = 04 [; C3 j9 g& p( V$ H
kernel.core_uses_pid = 1# @& M- |0 ?! o( g6 S8 i
net.ipv4.tcp_syncookies = 11 a" e+ R, Y6 Z0 p5 o( R) q
kernel.msgmnb = 65536) B0 z: \% G" d6 r4 n G- q
kernel.msgmax = 65536' ^. h# w. O% j" Q5 K1 ]
kernel.shmmax = 68719476736( g2 P; S) H) a; a; a# K
kernel.shmall = 42949672967 N% b9 H% m& g4 [" r5 Q$ ~7 N
net.ipv4.tcp_max_tw_buckets = 6000
4 B6 V& i; I. y( d* X8 [net.ipv4.tcp_sack = 17 [6 S. z' X% u2 }3 j
net.ipv4.tcp_window_scaling = 1
+ ~, ^7 E j/ T: Cnet.ipv4.tcp_rmem = 4096 87380 4194304$ ]/ r! l b8 x
net.ipv4.tcp_wmem = 4096 16384 4194304$ ]" v3 n2 {: \5 G2 Q
net.core.wmem_default = 8388608& r! {9 p: G; O5 z% Z! ^
net.core.rmem_default = 83886088 ~' l2 F9 ^ {
net.core.rmem_max = 16777216
4 q, E2 O! A5 j }5 ^net.core.wmem_max = 16777216* E+ t. d0 l2 r9 n' K
net.core.netdev_max_backlog = 262144
' X! h. j' x* r8 o) `3 wnet.core.somaxconn = 262144
7 u: T, O8 y. X4 G3 Rnet.ipv4.tcp_max_orphans = 3276800
! V4 R* N7 v f8 Enet.ipv4.tcp_max_syn_backlog = 262144. M' o% |! Y% J# k$ A/ e
net.ipv4.tcp_timestamps = 0
6 ` J+ B( l6 ]+ b8 tnet.ipv4.tcp_synack_retries = 1
b! |- e6 V2 K) H! Bnet.ipv4.tcp_syn_retries = 1
; ^! P5 {& w# I- Z3 K9 s5 \8 r3 Fnet.ipv4.tcp_tw_recycle = 1, p, r* b- R0 R' h; \
net.ipv4.tcp_tw_reuse = 1
/ \4 F2 y1 L5 k7 {( R4 @net.ipv4.tcp_mem = 94500000 915000000 9270000001 l v0 s5 y" |, D9 \+ W
net.ipv4.tcp_fin_timeout = 1
: m" W3 c# P% G7 F& \' Y {: Unet.ipv4.tcp_keepalive_time = 30 u+ O X) }/ D3 ? U9 z
net.ipv4.ip_local_port_range = 1024 65000' V; m0 b8 m! ~% |3 U" l
4 c! ~3 r& L) Z! O/ \+ `
8 G1 J. I1 ?% p! T下面是一個簡單的 nginx 配置文件:nginx.conf
# y* E! [$ B2 t6 i6 r: [user www www;, \( W' i6 D& Y* ~& N7 p
worker_processes 8;
1 @5 |, E8 o0 n" }worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;( w- |! C5 v9 L- ]1 c6 F+ X
error_log /www/log/nginx_error.log crit;$ V, T# k4 Q+ @5 P5 G
pid /usr/local/nginx/nginx.pid;2 \4 x* Z# [1 z8 h$ P
worker_rlimit_nofile 204800;
% w4 {4 O3 {& e5 f; Eevents
! z: J8 j% W- i: E* ? b$ }% A{- B7 l# E! d+ T% H
use epoll;
# d5 V6 l# T, ]: J- k# w6 t$ n worker_connections 204800;
2 `) [, M" ?2 z" W$ g, {4 F& Q}- T9 d5 I% Q7 m6 D5 ]# g
http
5 _& I; g5 Y0 i- h" u6 V{+ I: ]5 @/ i4 w8 [7 f: ^
include mime.types;1 G- ~ R4 @, T
default_type application/octet-stream;
* b% K5 H* x E5 y2 ^ charset utf-8;3 m# v, a0 K% F$ _& c9 z. x
server_names_hash_bucket_size 128;
* j7 x# G5 E. C7 S& v7 k. I0 z6 f client_header_buffer_size 2k;4 r2 E" s2 \$ _% @0 {
large_client_header_buffers 4 4k;
& [! }! k" z) g- G* m% V; \ client_max_body_size 8m;5 I& H5 Y8 S. n
sendfile on;
% K' Y n( \% R" M; V tcp_nopush on;( o* y% ]* i% M7 E8 Y" w @/ h
keepalive_timeout 60;
. b+ c- V5 N' p% Z. n fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
2 r E9 V$ s* W0 q" p1 r% W fastcgi_connect_timeout 300;
. s! F, C; }) r1 w8 ~ fastcgi_send_timeout 300;* X% f$ ^+ P: [3 T( J
fastcgi_read_timeout 300;
# V3 x' H) y5 H2 m) J ~ fastcgi_buffer_size 16k;
: p8 ~& ?6 P/ X' v+ l8 c fastcgi_buffers 16 16k;. I" k7 u; O- F }4 e- M
fastcgi_busy_buffers_size 16k;6 Y9 f/ h) p# F. `) q9 U7 Z
fastcgi_temp_file_write_size 16k;' ~! {- ]4 H" h6 o* h
fastcgi_cache TEST;
6 w6 I' U) @# k, T% l O. l+ K fastcgi_cache_valid 200 302 1h;
+ z& ?/ H6 x% \& P) O1 _8 n. v fastcgi_cache_valid 301 1d;
# {/ b& S4 k; a' a& h0 A, o fastcgi_cache_valid any 1m;4 p! U1 n Z& _8 H7 B9 W
fastcgi_cache_min_uses 1;- x2 R5 g$ w b" f; ?- |
fastcgi_cache_use_stale error timeout invalid_header http_500;
( Q* |3 f, n; R; X open_file_cache max=204800 inactive=20s;
1 G! O1 u1 b; R. I open_file_cache_min_uses 1;& C3 e7 x6 v8 q5 A/ c
open_file_cache_valid 30s;3 t6 D: M1 W- J, \4 g
tcp_nodelay on;& K3 o1 H% U+ Y. j! J% R8 o
gzip on;
- u: T: M) K( b$ j3 j4 S2 T gzip_min_length 1k;+ B4 m/ F* n/ q; J4 ^9 A; W8 H
gzip_buffers 4 16k;4 V7 t7 ^) f+ }1 B" y, b: d+ v
gzip_http_version 1.0;
5 e! M* }/ M4 c gzip_comp_level 2;
6 r; _- S) G2 V/ U' T gzip_types text/plain application/x-javascript text/css application/xml;7 H+ J6 A2 j* z3 r/ f2 w9 S
gzip_vary on;6 Q) A+ Y# e$ G7 u
server
+ p' i9 A3 [' S% z3 C+ t { |- f( ~3 w4 _/ f* h
listen 8080;) @, ?1 S& x2 d. ]( ^
server_name backup.aiju.com;
* q# g$ a! Z1 J% N6 l3 s index index.php index.htm;
% N9 K$ w; ]6 G" K: R root /www/html/;( L- D# _. E& m: i4 k9 _2 n' {" k) M
location /status
1 }& x2 U7 b( ?& `- ] {' N. a0 P' @0 v; d' a4 E
stub_status on;
, {, M. f5 s# P3 [$ _ }( m6 }9 P* n- W- M0 W
location ~ .*\.(php|php5)?$7 N6 C4 @& g) n9 s4 r q
{
6 L+ E+ r- X0 s2 e fastcgi_pass 127.0.0.1:9000;
5 w. O9 H) B3 `6 R% L fastcgi_index index.php;
- Q; Y2 ?: t, b) m& P8 V include fcgi.conf;
9 q/ U$ r7 {) ^8 q; h' T }3 U: t) d$ q8 W( Q1 a7 n: I) V
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
m6 F/ S5 ^3 J1 D5 U* W {2 M0 |3 y, N9 ~: Q
expires 30d;, z J/ g: u; U5 N% \/ [
}) t- a6 B3 R1 u* D& B0 M3 n
log_format access '$remote_addr - $remote_user [$time_local] "$request" '1 D% ]3 S4 `3 v' s8 j# e% \3 ^
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
) B+ O9 ]- u& y: \4 l* t access_log /www/log/access.log access;
5 t; T* z+ Z6 B H& q; j! s }9 `9 f, w$ G7 E) S+ ^+ @
}
# c1 U. I4 [ r, H) y& ^+ b" ?# t: G- K/ ?# q h) F4 o4 f
關於 FastCGI 的幾個指令:
7 o6 C% Z/ v3 V$ s' yfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
4 G: }4 r% D) O8 V8 B/ E- ]9 M這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。1 F$ `* Y6 p% ~! r/ J
fastcgi_connect_timeout 300;4 ?+ x5 W: {& P4 R9 Y7 z
指定連接到後端 FastCGI 的超時時間。
# ~, s9 N+ j P" D1 }fastcgi_send_timeout 300;' W* b( i! M6 X" D2 M
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
' O) z* F* v4 n: {$ o5 cfastcgi_read_timeout 300;7 m0 M2 t3 g% h7 }/ j8 x! r
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。5 R, m& ~- |( ^! _ C
fastcgi_buffer_size 16k;/ Y6 p' c0 V: R, ]* ]# u0 P9 e
指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的0 O1 q1 V. J& G1 ^. J% A
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過: I+ Z; s9 S1 E1 r# G% _) Z
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大5 V. w( s7 j8 e4 `2 y
小去緩存。
3 ]9 i& }1 S% ^, wfastcgi_buffers 16 16k;
( R* r9 A+ P# _" Y6 n9 d指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
; j6 I5 O+ `# G: j3 |; J則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,8 b' r" ?* i+ [& L1 s' q$ o2 I
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的: O) S9 j1 g0 w7 I
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設& i$ F# O6 n& T( w9 d: o0 D0 H9 L
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4! T/ }1 B9 }" ^; _9 |
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
: Q$ z" n1 }8 e( j1 P$ L會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
6 I% E7 E: u) k7 ?% ffastcgi_busy_buffers_size 32k;
. C8 C6 b. U5 R4 L p/ }7 q這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
# p4 A. L. e/ p8 x& P" Gfastcgi_temp_file_write_size 32k;
1 }5 a+ z; }& V; a. t) N* c在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。' @$ G0 X* t1 d D1 N
fastcgi_cache TEST
" F! E) @4 Y7 u( ~& X- j0 \開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
, V/ I* R, j7 X, M但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
8 Q* l+ {/ Q/ L8 s0 Y( J( E3 Ofastcgi_cache_valid 200 302 1h;5 [, ^6 h |" f
fastcgi_cache_valid 301 1d;/ R6 T- Y: M& ^2 x) T
fastcgi_cache_valid any 1m;
, e4 h5 ]. ?' p2 a0 D# U* }為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。$ H7 l" p z2 D! ?5 I
fastcgi_cache_min_uses 1;
+ L0 f% B! B( K8 s- V緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被7 W; e3 c; D$ k
使用,那麼這個文件將被移除。
2 ?: Y5 A! ` E: ?. Sfastcgi_cache_use_stale error timeout invalid_header http_500;& Z6 d7 H' z- n0 K0 q3 L% n
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
5 k1 c0 Q1 c* ^1 G4 p1 _. u以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
2 h, X8 [2 I4 K( g" BFastCGI,可以修改配置文件中的以下值:) c- w, _+ T. J; ~
<value name="max_children">60</value>6 {( m) d' i$ h: x4 O1 M
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。$ G& R( l; m n) U$ p) b- D9 K
<value name="rlimit_files">102400</value>
! @: Z$ f W7 Z: |最多打開文件數。
3 z8 r7 {1 O9 [2 u1 {<value name="max_requests">204800</value>* B- I6 _9 u2 y4 c: O
每個進程在重置之前能夠執行的最多請求數。* ?9 O# I; u. l8 g' u% w
. p. y1 Q2 D7 `) J; ~, Q: v3 O; [$ m
參考資料:: [2 j$ q( z9 {) e9 u. \
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
! [+ q$ `# g7 }2 K' |. O1 vhttp://blog.chinaunix.net/u3/105004/showart_2087155.html
. u& O' Y& v0 [/ |http://nginx.179401.cn/4 F; ]$ r0 s3 `; O' a- Y2 w p
http://blog.s135.com/nginx_php_v5/
; Z; J8 \1 K9 {9 l+ w! dhttp://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
7 t9 A9 x8 g2 v; w& C9 O4 Ohttps://www.netroby.com/view/3128
5 |9 Y7 E: H/ d& x6 Efastcgi 快取:' k5 r2 l: \4 v K5 P4 t; ^
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/3 N F( {" X8 ^
其他:
& z( f" z$ r Pnginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
# m& `6 Y# ]. c I$ A. unginx優化:http://www.jianshu.com/p/2184654ba4b21 U% Y7 w- q9 `5 G
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on
( k+ a( p, i2 t6 m- }. g4 E9 {
. @3 h0 J7 X, s. X% n
/ W* D8 Q8 y3 N* F2 }9 _1 b' e& D+ B$ L% ?& j: e. t. z" {; \1 Y" Q
/ f$ H' a3 T. L% ]) f6 ~* G& p: V
|
|