tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
) E; _' d6 O% Y9 w* q. ]0 Y一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:9 W1 H7 b" ~8 m+ D5 {) q5 H
worker_processes 8;
6 I2 c& o3 ]2 N- Ynginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。. u5 B B4 u2 Y5 i
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;+ T' p9 H: W/ X
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
* S, a) S+ S8 t6 Sworker_rlimit_nofile 102400;
* U+ f/ Y2 j6 w2 c" i這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數
! v% o* D6 R9 O3 V相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。7 ^/ _5 K6 L' c
use epoll;3 y$ J# V) B& X f7 A
使用 epoll 的 I/O 模型,這個不用說了吧。
, t, l8 l$ ^" w4 Lworker_connections 102400;
4 T7 t2 N* |$ e6 i每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。8 a' C+ u7 |4 e; K
keepalive_timeout 60;
9 @+ a! k; A: Z1 ?/ i' H* Pkeepalive 超時時間。
, h, `& w( [7 p5 I h- f% iclient_header_buffer_size 4k;6 }! b) Q0 ^" T7 L. g" [0 k" T# z
客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
, [- a$ i. Y; L' ]4 ]於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。& q, v' J' D# U( Q
open_file_cache max=102400 inactive=20s;; s2 r$ `5 U7 ~) L" ]1 f$ ^0 _
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
& j2 G" [2 o4 C. r1 g間文件沒被請求後刪除緩存。
! ~8 m4 ^" U) d6 l' e( uopen_file_cache_valid 30s;: j8 x: a, S1 ^: Z4 k
這個是指多長時間檢查一次緩存的有效信息。9 M# p4 X# n. c0 L3 ]
open_file_cache_min_uses 1;
" y% v2 {2 n7 d: I' W1 H' O7 a# hopen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打* }* @3 H( J5 _0 q
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
& d: M/ ?' L6 S, W) Q- A4 P' C# ^& ], b; R2 H+ T3 h: \9 H
* I) y7 b" A- u) Z9 }+ s4 C關於內核參數的優化: {+ k _+ g A6 x. N3 c& F
net.ipv4.tcp_max_tw_buckets = 6000, ?, @. T' E& k6 ?
timewait 的數量,默認是 180000。7 v* `$ M* ]+ i+ z. N
net.ipv4.ip_local_port_range = 1024 65000
( u3 k. H4 O! L6 |& Y) Y% i允許系統打開的端口範圍。& n/ l4 s ]8 Q6 Z
net.ipv4.tcp_tw_recycle = 1# G1 i3 l8 ]2 ^; o- c, d! b3 |
啟用 timewait 快速回收。% Q& m8 t1 _; k+ L, I( q
net.ipv4.tcp_tw_reuse = 1# w9 K- C) w5 R! K# K
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
* Q- ^: L" ^9 U5 d L$ B. bnet.ipv4.tcp_syncookies = 1
% S- Z+ |! Y" z6 `4 O8 m開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
0 M- Z) G4 \. @9 Mnet.core.somaxconn = 2621447 Y: K: o7 ]0 A# B
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
V# b" d/ ]6 t/ B: u" S1 kNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
3 K+ T6 l2 e! u4 V0 F' Snet.core.netdev_max_backlog = 262144) ^! |, P, t6 s6 Z [- f
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。. v9 f [1 G/ v$ F ~. ]
net.ipv4.tcp_max_orphans = 262144
, F* O+ e9 V5 X- I- `. o, @2 f系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
" ]4 d+ A7 H; z印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值( `3 y: W: M6 S
(如果增加了內存之後)。
j* q' F8 r/ t$ k1 h6 fnet.ipv4.tcp_max_syn_backlog = 2621443 v* ?9 [# O0 l6 f
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
3 J' G) w. o% ~* j1 R4 f5 b$ l統則是 128。7 i2 J6 h p; K' }
net.ipv4.tcp_timestamps = 0
/ s+ S7 [4 ]5 N& a( ?- W2 O0 k時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
# \6 B8 d; Q1 L0 O ^9 O$ g數據包。這裡需要將其關掉。/ \0 `5 u$ r# x. U6 s0 P; ]& |
net.ipv4.tcp_synack_retries = 1" {: d! i$ P. [! F
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次
# z/ b& l" y7 x: w& g) e握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
: z' G# i0 O4 w6 H+ k' d2 znet.ipv4.tcp_syn_retries = 1
2 h# s% l8 t7 K. J# F: @在內核放棄建立連接之前發送 SYN 包的數量。
1 c, _4 k' g' H/ T+ d2 f; Mnet.ipv4.tcp_fin_timeout = 16 B% Q, e/ m9 B+ ^. F! B" Y
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚0 y0 v6 E) _1 [# [" t
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕6 K7 U5 n, a- G9 J2 P2 L
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最2 \0 E k) q* _2 U( t7 Z" \
多只能吃掉 1.5K 內存,但是它們的生存期長些。3 ]& ]8 ]* c' }4 r5 u! M1 m# K$ {+ }
net.ipv4.tcp_keepalive_time = 30
. Z+ I/ l6 b u$ \- F當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。# Z- X/ y* X8 R2 Y9 |; X
& p9 _& P- ]# f/ [+ x; Z# M9 m
1 B( e% b2 B: w) ]9 Q下面貼一個完整的內核優化設置: y% n) \7 D" B
net.ipv4.ip_forward = 0
: _4 c) A9 d) ^; t% V n8 Rnet.ipv4.conf.default.rp_filter = 1' ^7 h) l: _0 S5 k1 h
net.ipv4.conf.default.accept_source_route = 0
; d( l/ s. E" P( Akernel.sysrq = 0
, Y6 L3 w& U, s' i a& i J( Ckernel.core_uses_pid = 1) N9 Z: [! y6 X3 `$ U1 }! a# J
net.ipv4.tcp_syncookies = 1# x$ ?" }, e' `3 g
kernel.msgmnb = 65536 y2 o# m5 {# q' e- u R
kernel.msgmax = 65536 `/ n# U+ D7 ^9 y" I
kernel.shmmax = 68719476736* W, D2 G4 M7 \2 p
kernel.shmall = 4294967296
' Y: l% y5 _4 j- rnet.ipv4.tcp_max_tw_buckets = 6000
8 q& u* h I! G, }) ?- Vnet.ipv4.tcp_sack = 1 }' D: b1 w2 R
net.ipv4.tcp_window_scaling = 17 M& a' q+ A8 z: Y
net.ipv4.tcp_rmem = 4096 87380 4194304
5 s$ b% t* z$ Y* z Ynet.ipv4.tcp_wmem = 4096 16384 4194304+ W/ d9 i. W$ N; \4 ^
net.core.wmem_default = 8388608
0 M8 K9 z# w- P3 u: k. inet.core.rmem_default = 83886085 r0 ]8 B0 o+ N! v8 o
net.core.rmem_max = 16777216# h/ \$ X O; h) v
net.core.wmem_max = 16777216, z, l9 b- P" ~
net.core.netdev_max_backlog = 262144 d% {9 \* {8 O" _, t" ]
net.core.somaxconn = 2621444 B8 p( o! ]& a. k
net.ipv4.tcp_max_orphans = 32768007 d- t3 r( f4 D; t* y$ Q7 O
net.ipv4.tcp_max_syn_backlog = 2621448 V( w- ?' e: ]% W2 {& E
net.ipv4.tcp_timestamps = 0
9 B$ z) @9 O7 ^: M7 L8 Xnet.ipv4.tcp_synack_retries = 1
* J, z: A- a0 T8 t' o- P8 ?net.ipv4.tcp_syn_retries = 1* }' w3 n5 r) H! Q( O& d. ^
net.ipv4.tcp_tw_recycle = 1
$ I; t: N, R, E- {net.ipv4.tcp_tw_reuse = 1
# \) f( }+ u$ Z( F x. Bnet.ipv4.tcp_mem = 94500000 915000000 927000000% c2 V) [) t7 b( k: a, }$ o
net.ipv4.tcp_fin_timeout = 1
2 o3 u; b3 @4 D6 U# mnet.ipv4.tcp_keepalive_time = 308 ^7 H1 w+ H3 t2 J$ `8 ?# n" _
net.ipv4.ip_local_port_range = 1024 65000$ a$ j2 C8 @! ?0 }8 R- j* X' V( u
; M ]. t2 W" j; g7 {
# P7 v3 r9 L3 E ]8 b下面是一個簡單的 nginx 配置文件:nginx.conf
8 Q* e2 |1 n1 a( f: B. c( A1 _user www www;
1 c$ k' C! T' ~worker_processes 8;0 m7 y1 l" r! g: Z6 t, Y$ @( T
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
4 c( ]' M+ R; t- ~/ v; ^ {4 oerror_log /www/log/nginx_error.log crit;
" L+ x& Y V9 }6 \* ~: L7 dpid /usr/local/nginx/nginx.pid;" [/ e% Q) z6 {$ c9 u9 W
worker_rlimit_nofile 204800;# G9 r3 x* e# N6 ?2 M: W* z& t
events
0 o. P9 K0 H/ ^. C$ ^9 p6 h* [* p; A8 G{ n$ R" k: g, @7 f* J
use epoll;& ?, t0 I- z( x0 x
worker_connections 204800;: |5 @) P( A/ r Z: g3 I' j) _
}
9 x8 I, I! B" X6 z' u' R" Rhttp) `: F" Z1 m' M0 q& q7 ]* q2 Y
{
% R3 V. Y4 p* u+ J$ A9 I9 ]include mime.types;- S; _1 y! ?5 r2 e! f
default_type application/octet-stream;, r" Z. J" `6 w5 X
charset utf-8;
* L2 O9 \! B4 F4 z+ `) u server_names_hash_bucket_size 128;
9 n9 ]8 a' W& `* E' \+ I+ j client_header_buffer_size 2k;3 l5 Y l8 G; S8 [. v3 A. E9 A
large_client_header_buffers 4 4k;& [: j2 a3 ]9 j E
client_max_body_size 8m;' t, i( B* Y5 Y5 g1 B5 `( N
sendfile on;
, b* w1 u/ C3 Z5 F( o9 ~ J, G tcp_nopush on;" E: u+ T( c% C
keepalive_timeout 60;- D" b% L" A N) g7 W6 \, S
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
' P) {# N3 c! V! }. T7 e fastcgi_connect_timeout 300;$ c% W3 k) }# b7 J# q+ T( ^5 Z
fastcgi_send_timeout 300;5 N3 l. f8 l2 n3 q- E
fastcgi_read_timeout 300;
0 ~& y: M6 T* f. d: ^1 C% F fastcgi_buffer_size 16k;. ?% {. G- [6 l9 Z
fastcgi_buffers 16 16k;
8 c s9 @0 u& |& p6 V; c2 E$ E8 j fastcgi_busy_buffers_size 16k;
" U# C% ]3 |$ G) _! | fastcgi_temp_file_write_size 16k;6 V3 s3 p& k- T; h
fastcgi_cache TEST;; o) @$ v/ W. h+ q# z @. }6 x- Y
fastcgi_cache_valid 200 302 1h;, p0 i& a+ A, X5 C; E" w& s
fastcgi_cache_valid 301 1d;
3 f* E7 O6 _4 G; \. X/ R fastcgi_cache_valid any 1m;
- t7 `: F! ^: W( p% l* H fastcgi_cache_min_uses 1;7 z+ f# N; w# Y) o
fastcgi_cache_use_stale error timeout invalid_header http_500;. {2 c6 F" {; d: x! |% k$ h+ G
open_file_cache max=204800 inactive=20s;" Q6 a7 U4 b! ?6 W: e
open_file_cache_min_uses 1;/ N7 Q6 N# i$ K: Y
open_file_cache_valid 30s;: A9 H& y. a2 V V1 v8 X0 p' }
tcp_nodelay on;5 l. R! X, H | \! ~, M4 C( I
gzip on;
' s! S, w' U- i# g) D7 i gzip_min_length 1k;- h2 e) t8 \- T+ ] I$ `( m
gzip_buffers 4 16k;
6 ~6 p: m. a1 U gzip_http_version 1.0;
! C: F0 x. i, x; O2 H gzip_comp_level 2;
+ E5 c5 V& ^- J$ \$ A+ h gzip_types text/plain application/x-javascript text/css application/xml;3 P3 a; X, \, U- h
gzip_vary on;$ N0 c8 G- |" I( K
server
; q S5 b, J( X {
0 T* r }2 D2 S) j, V2 Z+ I listen 8080;
4 ?) `0 S1 ?4 ?( p server_name backup.aiju.com;1 A3 |* z/ `* I6 y) O; B& q! F
index index.php index.htm;
5 |) B0 |, Y/ o! Z root /www/html/;
3 w+ g' X- g/ j4 v7 x location /status+ n1 E# {, d- @4 m3 J
{. {6 e) p+ l+ C, W0 X3 E7 f
stub_status on;4 F: I3 \! [* w- Y3 m# P8 A6 e
}' l6 s- d' ?1 [4 S
location ~ .*\.(php|php5)?$
4 V: i) Y6 S0 m. Z( D* x {
$ G' m7 }! R2 e+ @$ p fastcgi_pass 127.0.0.1:9000;
; @' f- n$ K. t2 z fastcgi_index index.php;
7 b' V _% `9 l( u include fcgi.conf;
+ H3 M. o8 |- p! X# n) `/ X }
! e, N+ \7 }/ m* S9 ~ location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$6 G4 Y" _1 j8 v1 |. A
{
& m. F- P( J, p. ? expires 30d;) s! u1 |/ Q5 e" x" v
}
O) x5 _: m) C6 ^ log_format access '$remote_addr - $remote_user [$time_local] "$request" '4 P3 G; B: I1 W- K. I# D6 m
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';% _: M- V, }4 `) v* a
access_log /www/log/access.log access;
% N. W) R) Y* o1 P }5 K; J; u3 l' |# M' l: Y8 C
}! @' G0 k% ^) @
: j* M# V: O. b8 S+ O- E' L
關於 FastCGI 的幾個指令:: N" Q/ m" F* ]+ d
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;& n0 P3 x+ d, t& U! k5 G# e- i/ t
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
9 ~- l; k9 X& h* H d/ U. ]! S) G ^0 b1 @fastcgi_connect_timeout 300;
- w7 y' ~0 g$ v {2 s* g+ O9 y4 b指定連接到後端 FastCGI 的超時時間。! `6 |8 h/ E) v- D9 V
fastcgi_send_timeout 300;
: ^% _1 k' H6 y! }) d% J向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。! [- O( j, c2 {3 D5 h9 t# t% d
fastcgi_read_timeout 300;
# P. Z' k" f% {8 M& I K& y接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。+ \3 ]; S3 K0 u! }! u6 J# y
fastcgi_buffer_size 16k;
! @8 [; v4 k, s: t指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的- J( d; `( d! r
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
- d4 l* V8 j) g1 M8 D1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
. N! X8 E6 O. v3 E小去緩存。
# u1 U. A, V0 l+ K! i/ p9 G" S; `+ M nfastcgi_buffers 16 16k;
# Z1 G8 M0 y! Y# ^0 t, x# o指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,& a; n! N' e2 \) C5 F$ E: _
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,7 i8 p, O2 C- t' J1 M1 p7 r
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
4 j. ] K5 `' c/ h站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
0 f; d' V. K, @& c置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4" R$ _5 a J* [2 d
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它1 V& v; U8 D0 n1 ^) p$ e
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。/ ^4 L3 I" E/ P; W/ y
fastcgi_busy_buffers_size 32k;% `, m( v8 |8 T& W/ z
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
- b% Z h" @! d2 T2 @8 @0 Ifastcgi_temp_file_write_size 32k;
( u7 ?5 N( a2 P在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
) G- d/ }" j( T7 Z/ D0 |# `fastcgi_cache TEST
( }: K- W9 k+ J) f u3 y開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。% f5 U# g1 V/ ]
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
0 F+ I$ |4 g# z* u. Rfastcgi_cache_valid 200 302 1h;8 M; n, M( Y! k) _/ P7 C, p- @
fastcgi_cache_valid 301 1d;+ q# \2 S$ I, w- J% K6 T e
fastcgi_cache_valid any 1m;
' R, G, D( z$ z* G( o% x. k V為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。
0 d& R# S# B* @* Q$ ]9 Yfastcgi_cache_min_uses 1;
8 a. s2 o( h# S9 _8 M2 s, j/ [緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被0 ^" S( ]! x; V
使用,那麼這個文件將被移除。( p- X0 {8 } ^8 K7 R
fastcgi_cache_use_stale error timeout invalid_header http_500;
+ Q1 s1 F5 P9 h& D( X5 B' ^不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
7 ?" E9 w& E" \! F% ]3 J以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
- H) { s; W2 `FastCGI,可以修改配置文件中的以下值:4 G; @6 ]2 v! v5 v/ Q3 _, F. E
<value name="max_children">60</value>6 z' i- y2 {, k9 F" H5 D
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。& K1 l6 @% N M; u! O
<value name="rlimit_files">102400</value>
& V2 e6 C! J4 q6 K最多打開文件數。- @) O, _; i1 V: `0 n& N
<value name="max_requests">204800</value>
) W$ l" Y9 `8 } q5 Q9 l每個進程在重置之前能夠執行的最多請求數。; T8 o: H) A H
9 |5 X/ j; B, W+ p# N2 G3 E" |# W4 L! M1 U" K) n
參考資料:
2 K2 i# y$ d$ Ohttp://demo.ckan.org/dataset/daf ... /download/nginx.pdf( x) O" \- e- q2 g
http://blog.chinaunix.net/u3/105004/showart_2087155.html
+ E' s! S9 A3 K% shttp://nginx.179401.cn/7 J" q# J" ?- L7 @
http://blog.s135.com/nginx_php_v5/
. w! N# d7 o1 A& ]http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
& c+ @ q# P6 @3 Bhttps://www.netroby.com/view/3128
- N. G! p( S: d+ e/ v, ~1 ^+ Lfastcgi 快取:0 T9 s0 @% K% A' \- M) N
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
6 l ]% G9 D0 l6 B. y) a1 K/ {其他:: g0 h% @ b7 O3 [9 m& D/ C
nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout8 F9 ^0 s# V! w( f1 t9 K+ [2 L
nginx優化:http://www.jianshu.com/p/2184654ba4b2( E7 L- B% ]$ U2 i' K- h9 `7 Z" ~
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on
0 i( a, C4 q/ L! j
& k, C9 I! x& u2 K5 r" W- }
, s# L7 G. S; M& Y' r# b3 R& ~6 E, ]( r3 s: V
% h- ?4 ? ^; H/ P. C n |