以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
3 W) S: t$ {2 R; I! p一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
. g' K( _2 w# m/ f* R: k& z1 rworker_processes 8;0 y& R; b5 p. l& J! F& U
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
$ Z, G- x! f4 B7 M' yworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;6 I! f5 o+ i6 G4 C9 p
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。- B& G5 P8 I2 [8 z/ }8 p) t
worker_rlimit_nofile 102400;4 l7 }5 R" i# H7 u; C* @0 ^/ _
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數1 n; |! D$ W% r( M' O) l5 t. [ t
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
9 y7 _" C- x7 E6 g- p: O1 [use epoll;
2 ]5 V8 a9 Z( \( G) v; ]' P使用 epoll 的 I/O 模型,這個不用說了吧。' [& e2 c @% X( E! d% p9 E4 r
worker_connections 102400;8 H9 S2 V/ I0 Y1 c! \
每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。# |4 e+ z3 v5 E$ c+ m; j ~4 j
keepalive_timeout 60;
0 L- m: X( O8 z' ]. \keepalive 超時時間。2 M* W2 v7 K& L! W. h4 P/ i/ r
client_header_buffer_size 4k;
5 G1 H0 V/ J7 P; C# P; V客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由. u: D: c/ n" j$ ?, |3 i4 ^
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
- n) _# o+ a, l6 T7 Bopen_file_cache max=102400 inactive=20s;
1 v- ~7 [% d# r8 B這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時3 g* B) o2 p) Y) F
間文件沒被請求後刪除緩存。3 h, x$ X! U$ d' Y l$ u; k3 M
open_file_cache_valid 30s;& ?1 ~# w5 n0 d1 E' H s, s
這個是指多長時間檢查一次緩存的有效信息。$ a3 u' `2 {; Q) x% t7 {' E# F
open_file_cache_min_uses 1;
) ~' `8 k3 F' W: Mopen_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打# j8 G; L+ n! v2 ?' K$ Z
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
! \& S y! v3 }# ^9 P2 c* T3 I( U
6 e4 l7 w3 ?; p: P/ A7 L Y$ Z0 A% X
關於內核參數的優化:
9 x' [+ o+ Y. R0 P# a% fnet.ipv4.tcp_max_tw_buckets = 60008 V& {. o7 n2 x3 \* z" \
timewait 的數量,默認是 180000。1 B; l4 Q% L, }
net.ipv4.ip_local_port_range = 1024 65000
+ I5 h7 Y p4 v% }6 V允許系統打開的端口範圍。
0 i: |6 u7 d" L5 V6 k: t cnet.ipv4.tcp_tw_recycle = 1
8 t' O/ t. C/ |& {啟用 timewait 快速回收。
; B' _5 i( }4 G- x' u& unet.ipv4.tcp_tw_reuse = 19 j5 X9 H& D# ^' b( s
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
B2 V! p( L6 c" m+ ?net.ipv4.tcp_syncookies = 1* V4 y4 S+ i% r0 Z- |0 C
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
- f8 @$ ^ X/ m% Pnet.core.somaxconn = 2621445 d+ b7 M0 A" M& Z
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
5 R& K+ y1 v/ q9 j! B6 w! h. JNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
& _' X/ v* `# C% h2 k5 o- d4 Anet.core.netdev_max_backlog = 2621440 [8 i% c' D. ?3 ~3 Q' q* J) U
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。0 X7 a; G7 P& M2 F/ a3 b" J
net.ipv4.tcp_max_orphans = 262144/ F% C. o1 M- o$ C
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
- n0 t3 I6 W" l. z7 q' W% G印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值" B! t/ L7 H/ b/ h; J
(如果增加了內存之後)。
+ s4 j5 p: f1 \0 @net.ipv4.tcp_max_syn_backlog = 262144
! e" x6 Q1 g0 x6 P6 o記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
# M0 X5 M e7 S2 A+ d N統則是 128。
/ n1 \3 S4 _& e; Enet.ipv4.tcp_timestamps = 0
6 P) ~* d2 P+ C2 F: i4 h6 m( J時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
: L& K8 D. p3 K% ~1 f& o$ S: t數據包。這裡需要將其關掉。
; T4 f) C% N9 b$ t+ R P5 p" Onet.ipv4.tcp_synack_retries = 1
6 X$ e6 F& v* H5 n& l" _為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次0 o e6 j( r& F, j3 k
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。9 _; `, }. d! M+ I5 n
net.ipv4.tcp_syn_retries = 1: n L+ x7 V5 b8 K1 u! z
在內核放棄建立連接之前發送 SYN 包的數量。3 Q" m& N9 V8 I$ z; Y0 L
net.ipv4.tcp_fin_timeout = 1% S& c" ?& l+ ?! x; q5 ^
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚& C7 J2 B: l) E
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕
6 }' r: f9 f8 O載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
: e [6 o* s, X! T+ v4 G! \多只能吃掉 1.5K 內存,但是它們的生存期長些。
. E& `$ F5 g" ~/ k% x8 @, gnet.ipv4.tcp_keepalive_time = 30
& j. \9 Y. ^4 H }& W% l/ A2 n0 V' Z) O當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
- w5 z2 B$ C/ N& D' |, d* E' Y4 E0 f$ i! u" t8 F0 v, h
+ X: ?: d9 {1 W0 S
下面貼一個完整的內核優化設置:) h0 D+ N6 \5 b) n4 }7 j# d4 @
net.ipv4.ip_forward = 00 p" f1 A7 }9 {4 P4 \5 J) e
net.ipv4.conf.default.rp_filter = 1. v) e' b9 {( T. i8 x
net.ipv4.conf.default.accept_source_route = 07 b0 Y4 S3 n! u# F
kernel.sysrq = 0
6 W" C7 h- f+ W/ Fkernel.core_uses_pid = 1& m: n* \) g9 [4 W9 j& j. }( |* u
net.ipv4.tcp_syncookies = 17 G2 ?( B$ P" f* j/ O/ u3 ]
kernel.msgmnb = 65536
g- e1 R& E2 s; p' rkernel.msgmax = 655366 g3 g' O, ^6 \7 }
kernel.shmmax = 687194767364 u! | x- ~. \' Z) c. r
kernel.shmall = 4294967296
4 ]5 g6 X" M+ Znet.ipv4.tcp_max_tw_buckets = 6000
" P) H* G: m( G. inet.ipv4.tcp_sack = 1
) u/ ^' e2 U1 K$ H2 rnet.ipv4.tcp_window_scaling = 1
% Z9 K# c1 V2 m; T. W+ t5 }+ L7 Vnet.ipv4.tcp_rmem = 4096 87380 4194304
* F& x6 A" s' _# Z# i2 E7 W. K2 j' xnet.ipv4.tcp_wmem = 4096 16384 4194304- c$ @* v/ G# H4 U" q8 c
net.core.wmem_default = 8388608
1 G \4 }" @# I$ X- N; Y# pnet.core.rmem_default = 8388608+ a" l9 T" }% R3 h) q! G( G
net.core.rmem_max = 16777216+ B. f2 {7 u: D0 U3 b
net.core.wmem_max = 16777216
; r7 T) c* a0 m/ V4 ~9 Wnet.core.netdev_max_backlog = 262144( `8 R9 a- E3 G' {8 {
net.core.somaxconn = 262144) n2 R/ S& y* {
net.ipv4.tcp_max_orphans = 3276800
& M; k" C& m4 D+ u' Enet.ipv4.tcp_max_syn_backlog = 262144# m5 u; S9 l; @9 @+ U
net.ipv4.tcp_timestamps = 0
# q; Y& \ [( r0 anet.ipv4.tcp_synack_retries = 1
& A6 e& ~( d! c. w" t9 O0 b% Snet.ipv4.tcp_syn_retries = 1" r9 J) K C0 ~7 b) p
net.ipv4.tcp_tw_recycle = 1: u \5 u. ~& f& K# S
net.ipv4.tcp_tw_reuse = 1, V$ Z% n$ T( K9 f1 S
net.ipv4.tcp_mem = 94500000 915000000 927000000% n) [, g9 s8 s0 J8 ?" L
net.ipv4.tcp_fin_timeout = 1
1 z' s7 T' t. n2 T; R; }; ]: Ynet.ipv4.tcp_keepalive_time = 301 g! j+ j$ N0 J5 S
net.ipv4.ip_local_port_range = 1024 65000
* e) \$ |. e- b. H
9 h5 {" Y3 j& R2 @5 j7 j4 ^6 E. e# I* v) x' K6 \" ?
下面是一個簡單的 nginx 配置文件:nginx.conf
9 Y6 H# f- U4 J- |5 Q+ ]user www www;
# ?: ]& ]+ l3 n5 q: p5 G1 }worker_processes 8;
* Z: b8 T. p" Nworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
! d4 U0 L3 q* Kerror_log /www/log/nginx_error.log crit;- t# q5 g5 @# g; }- Y8 [
pid /usr/local/nginx/nginx.pid;
+ M: t a- U Aworker_rlimit_nofile 204800;
7 T! z. k/ a1 | `% Vevents
. |* z# p& T+ C# l3 W{
! w% F0 s! H/ m1 G5 j use epoll;
! ~( T: i+ m1 |, g' X3 ^ worker_connections 204800; ^7 B! a! W: d- v
}
) M7 O3 b, `- Mhttp
: ^" A6 ?. x: n" Y9 X+ X) e{; F3 P3 G) ?3 f9 P+ b$ Y* s' @
include mime.types;/ @6 Y) h& ^; M2 O& f( i
default_type application/octet-stream;$ o7 o9 B: ]8 `1 W
charset utf-8;% }2 c8 f/ q$ y
server_names_hash_bucket_size 128;' N5 n* E; B4 a5 {: }
client_header_buffer_size 2k;; v7 Z0 @( p- ~ ^+ b
large_client_header_buffers 4 4k;
% F4 l9 F1 g3 i0 E client_max_body_size 8m;% X. o h8 t- o6 o$ ^9 G I
sendfile on;
; ?5 S1 ~- g$ ~6 _+ B; E tcp_nopush on;
* N- V P) z! |5 e. W" A e/ U$ M keepalive_timeout 60;( K& Q2 k Z+ T4 c# z# a" X
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
* v8 f0 U' n& i% G( ?6 ^ fastcgi_connect_timeout 300;$ B( E+ Q, N' a7 s: l# Q* U
fastcgi_send_timeout 300;
- O F+ c* ~9 d3 T: d2 l fastcgi_read_timeout 300;" g# _6 l8 Q3 s! Y' `$ I* U
fastcgi_buffer_size 16k;. r. ^7 v" O; s4 w
fastcgi_buffers 16 16k;; n0 R5 y# C, M7 a! l4 q6 \
fastcgi_busy_buffers_size 16k;
! B/ }1 |8 p# Q, G9 m* l0 N1 X fastcgi_temp_file_write_size 16k;
/ P: J0 V) o/ Y, r6 c fastcgi_cache TEST;3 z) Y1 G8 d# g6 k
fastcgi_cache_valid 200 302 1h;
" G% ~5 {$ V, q' M. X" w2 {" R fastcgi_cache_valid 301 1d;, n, L0 s* Q: \ c7 u+ R/ S
fastcgi_cache_valid any 1m;
. r3 `. z% @( i$ q9 V& b fastcgi_cache_min_uses 1;4 X# V& U5 Y8 w7 R6 c6 B
fastcgi_cache_use_stale error timeout invalid_header http_500;
- X- j) Z( ]9 f, P: `- v8 o$ a- y open_file_cache max=204800 inactive=20s; p7 C4 q- |4 d5 f% p7 g" |
open_file_cache_min_uses 1;
. s; ^# t4 ?; Z, h( H open_file_cache_valid 30s;* `: x5 I/ R ]" N) n
tcp_nodelay on;
, _% P' n# p% |; g9 ] gzip on;
) a, i1 r' l* i4 J/ M/ X6 l Z gzip_min_length 1k;
$ B+ v# X0 d, A7 }* ~$ E: _ gzip_buffers 4 16k;
& D6 |) t& I* L( j: H1 t gzip_http_version 1.0;
7 Y9 P: W6 N' w- R) N5 l gzip_comp_level 2;
# P! T" I6 v# L( u2 S. @3 U gzip_types text/plain application/x-javascript text/css application/xml;
- o2 k' N1 I+ d1 f gzip_vary on;
4 |9 ~# c, _1 e& x' [ { server: Q5 U" f' t' L+ k' |& a! j( d
{
* D2 s& l& t$ a listen 8080;
5 S' a- `0 r, s! G* t/ p% F% _6 e server_name backup.aiju.com;8 |0 o" `. K, D o' \
index index.php index.htm;
. m+ O' K3 ^; I* s% N0 `( s' e root /www/html/;
8 X9 ?5 X8 N* X( L& B+ g location /status
) D; J. J5 s- U. f9 _$ A { R# X3 ^/ Y1 K* c3 ]) B L
stub_status on;
1 V5 D# Y2 O$ B+ B, B }
4 F: H m9 t7 X location ~ .*\.(php|php5)?$
3 a0 \, w6 f3 c/ b {
6 t$ p! {4 {/ J fastcgi_pass 127.0.0.1:9000;" n- s$ ^$ `/ \; v; E) P2 _+ G
fastcgi_index index.php;+ ?3 k3 ^: I8 i" J2 ]9 m
include fcgi.conf;
2 o6 N' U+ N. B6 X }2 J) y$ |6 j g+ M
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$% v$ h: I9 P9 k& M0 x
{! l; h( t1 L$ t: H, ?
expires 30d;( n, L% F5 i# N* J
}
3 S* Y+ W1 W6 K, ? log_format access '$remote_addr - $remote_user [$time_local] "$request" '
9 O8 ? D0 e K' x- R; {" C '$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
: ?, v% `& \; m6 E/ ^. T0 C- i5 k! h access_log /www/log/access.log access;! f0 a/ ^& t: Y" {
}4 O8 m6 p4 ~! w- [9 B; Z, L! Z* [# k
}
( d& v7 {8 }' d3 b1 @ n2 @- C% Q6 q$ V+ N7 P
關於 FastCGI 的幾個指令:, A: d1 j; |3 D9 _
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;2 k( A& P" g1 n9 B, Y2 a% d
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
# g8 u* \ ]: a) Z- d4 \% s+ ffastcgi_connect_timeout 300;4 Z, r5 U3 d+ _/ y) S" x
指定連接到後端 FastCGI 的超時時間。
2 w$ D$ O. e$ ]6 p( A. p: U- {fastcgi_send_timeout 300;3 u; ~( x/ h* w3 f1 q
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。+ _' Y$ y: p9 O9 M) p
fastcgi_read_timeout 300;" S( w- R8 L7 p b% g( T
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
( X; g% g+ f, q5 ?% kfastcgi_buffer_size 16k;
* |$ u4 \( o3 H, E$ V指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
/ b7 X2 |; b2 _+ v" W指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
3 B( y9 a: i/ g2 v6 y$ e1 Z4 l1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
0 l7 Z6 p; c$ N小去緩存。. p; d% k @; m# o# v L/ [4 K
fastcgi_buffers 16 16k;. {5 ]; k& C& Q9 |
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
( f! t% ~: Q! P# M6 K. v則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,5 n+ _2 p( n# _& n7 k6 D
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的; p- _ V' z& E. K
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設0 E" c" F9 p1 N+ G' U
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 49 A- \4 ^; r" `, K; }
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它2 Z/ B% n6 W- w* ?: T7 _
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。+ B: x* J) o2 C: x6 i
fastcgi_busy_buffers_size 32k;2 y8 ` @; Y4 J6 F
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
6 @' m& t$ ^" @3 v1 Kfastcgi_temp_file_write_size 32k; u- P6 O6 O. j# [
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
) A3 @9 S6 t `# i/ ~8 ^) Mfastcgi_cache TEST4 q0 N( [! e# N) |
開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
% A7 `% m& u* P$ e但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。9 T* t+ R- s- }9 I! V0 ]3 X
fastcgi_cache_valid 200 302 1h;
* B1 b1 C/ ?, ~4 g& ifastcgi_cache_valid 301 1d;# R% [; Y6 l2 ]: J4 q
fastcgi_cache_valid any 1m;+ V# t3 C3 ^+ Y* V$ O
為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。
& m1 D: v/ t; |& l5 r4 ^, afastcgi_cache_min_uses 1;% [* z M5 u8 M( M$ ?
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被) G' m' J( C! Y i5 s
使用,那麼這個文件將被移除。- C& J a) A$ y) b" _/ J( p
fastcgi_cache_use_stale error timeout invalid_header http_500;
* P% x6 w! z1 H' U! D. j不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。4 |4 [$ J) D) A* x0 V
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理, t' j- d5 I6 B
FastCGI,可以修改配置文件中的以下值:
4 d! ^) A& g, H; X, y( X* p, R% H: H<value name="max_children">60</value>
1 I8 A4 W* X+ v& P( f, B同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
. s6 u# r0 p p i6 Q2 I- j6 u1 |. S" i<value name="rlimit_files">102400</value>
% G# u6 Q& X9 q& B" R: A! G8 G最多打開文件數。( V' {' t9 z5 o8 Y3 i1 C
<value name="max_requests">204800</value>
/ C, E' _# d+ P, R: ]2 [每個進程在重置之前能夠執行的最多請求數。1 z9 S! V; ^2 w% S
0 y3 X6 |7 ]! P$ _1 ~' y
, v: j) N/ R. m: m% \參考資料:
5 C0 Q/ z: \3 V; hhttp://demo.ckan.org/dataset/daf ... /download/nginx.pdf' I0 D9 Q7 h8 o
http://blog.chinaunix.net/u3/105004/showart_2087155.html
6 O+ G& R; z$ U( }http://nginx.179401.cn/
& V6 k7 r: T) b) S# b zhttp://blog.s135.com/nginx_php_v5/
# S/ g8 \8 i% G5 ?7 w. s' Q& O) G- Thttp://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
8 C: ^+ D6 B1 V$ \3 Q2 k' `https://www.netroby.com/view/3128
8 h1 N1 s1 F5 a7 n8 q6 G/ Gfastcgi 快取:
/ f8 u& M" Z" T+ |https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
7 s( l% ?2 p3 h; k其他:
k A5 K5 r5 I* C& N& y/ K! V) |nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout' r7 b# ^, k- d9 E3 ^$ ~5 I! T
nginx優化:http://www.jianshu.com/p/2184654ba4b2' D$ v5 z% R$ v
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on& ~0 B1 Y' q+ \; m
H- T6 d& v5 U5 b5 p
4 ~* t3 d- G _& t$ ?
! H3 t; K/ h7 {2 M2 s7 n. {) }: m) ~. z0 q5 m: U, p% T2 W+ X3 P
|
|