以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf/ I- H" B N6 }; R/ N
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
% ]% U+ Q9 a+ Fworker_processes 8;# `/ A/ x; x; G$ C/ ^
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。 z* q4 ]8 g5 H( A
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
! X2 A9 p8 [6 H6 ~1 o/ N6 `1 h為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
0 F0 S+ w" [1 A, ^+ M% b% ^worker_rlimit_nofile 102400;2 E- X! m5 R8 x" {
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數# G# X! m. ^$ [- T1 K G* u7 W4 ~
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
& x8 _ ^( ?( [ Duse epoll;
9 h1 j! u- h: s5 E. J: x. e使用 epoll 的 I/O 模型,這個不用說了吧。
k3 U& M9 a9 t' x5 Xworker_connections 102400;
* K8 o R V' s5 Q4 x+ l每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。3 U, d( V4 W) e) }/ v0 h- }
keepalive_timeout 60;2 D+ m8 H) \" g! K. @
keepalive 超時時間。
) O7 b2 T9 G. q* {+ @client_header_buffer_size 4k;
8 j5 @" e. E' J+ ^3 M( U5 T% T客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由- B. F% e1 r7 p/ b
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
1 D: P. S9 e/ U( X0 r- E) Jopen_file_cache max=102400 inactive=20s;: y( n3 [" }; C) p9 @6 g
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時0 G8 G) n' k$ }
間文件沒被請求後刪除緩存。
/ f0 W6 M4 A( U8 z% hopen_file_cache_valid 30s;/ o9 t1 u; n5 }! i
這個是指多長時間檢查一次緩存的有效信息。
5 e" K$ t. p, h. _# L% `. b% W- gopen_file_cache_min_uses 1;0 J% L" r1 R+ g, H
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打
% x9 }, k2 w3 o ]7 U開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
% j/ z+ r$ O# E' O/ x0 V1 [, u4 d3 L; c* J a6 m
, B: P! b0 d. X* a* H/ M0 V, S
關於內核參數的優化:
2 R" Z0 @: E" |7 N! vnet.ipv4.tcp_max_tw_buckets = 6000
& n0 h0 f1 C9 e4 z: {) t* Otimewait 的數量,默認是 180000。5 T$ p! `9 K3 _# U8 s% ?
net.ipv4.ip_local_port_range = 1024 65000
, p; l+ y r E5 Q6 P允許系統打開的端口範圍。: B+ g! ?6 I7 S
net.ipv4.tcp_tw_recycle = 1
; ?5 r, ]. _: d啟用 timewait 快速回收。- w9 G1 c) N: T8 g/ }% I5 v+ h
net.ipv4.tcp_tw_reuse = 19 [9 [0 ^9 }6 u6 p& `4 `# f
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。0 m( S# W3 z. Q) o
net.ipv4.tcp_syncookies = 1( R5 ~/ w: r6 g
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。. n% @- s4 s7 e4 P: @
net.core.somaxconn = 2621443 ] X: e! a! l' P! Y
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
# X3 b% f2 u5 [7 g" S' FNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。' W! L1 J/ [4 Q$ a! @" }
net.core.netdev_max_backlog = 262144; ~& r3 b. o$ Z6 z& u ]
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。9 b' Q$ C- |. A8 t6 y
net.ipv4.tcp_max_orphans = 262144
; G i7 a: g2 `" I8 D- a系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打1 P; K+ _/ O: R/ }2 q
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
; V/ ^6 V ~6 [( \(如果增加了內存之後)。
4 D- P0 v; k; |net.ipv4.tcp_max_syn_backlog = 2621443 N" X4 P) o4 e: D- w
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
9 J8 P6 V [' s! J統則是 128。( y- A8 {- N4 |( P- M( A* a" x
net.ipv4.tcp_timestamps = 0 L! E! P( g P9 H$ j: P
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的& }2 t1 ?5 z: U: A6 }# x
數據包。這裡需要將其關掉。8 l! R% W. [9 J9 K6 j
net.ipv4.tcp_synack_retries = 1
* I+ j% G% x3 a' A" O: J2 c* _為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次3 Q, p! h9 C! W* }' j3 V
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。+ `. C& w1 s2 e) V" S
net.ipv4.tcp_syn_retries = 1' I7 Q' Z& W E8 b
在內核放棄建立連接之前發送 SYN 包的數量。
' Q% ^0 Y5 e& B1 w1 znet.ipv4.tcp_fin_timeout = 10 k$ g3 S4 i1 r& c6 A
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚" t% q( o& ~1 B/ g/ w% I
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕
" f0 {* Z3 x( @# `' t載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
/ O) f5 O& y6 a6 p4 ]% j; i1 E n多只能吃掉 1.5K 內存,但是它們的生存期長些。
: y6 g* Q/ j* S' w; `0 Snet.ipv4.tcp_keepalive_time = 30
( V5 b2 M. r1 K- d: j: \3 {當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
; i5 h& j+ d9 w0 N1 E @1 x
/ G. y f& ~% X+ E8 O; b$ A* ~9 R8 Z7 i4 R9 P- {# g. ?9 `& Y( H
下面貼一個完整的內核優化設置:1 }8 T+ ~) j2 q4 _' ?# U& u2 y
net.ipv4.ip_forward = 0) _3 J- ~' R8 @
net.ipv4.conf.default.rp_filter = 1
0 b! j n2 o" B0 I7 ^* Dnet.ipv4.conf.default.accept_source_route = 0
; ?4 ~1 V+ {1 n) T. Tkernel.sysrq = 0' ^7 i/ o, g! W' y4 m
kernel.core_uses_pid = 1
# T3 ]3 c- o0 @" _net.ipv4.tcp_syncookies = 1& H: G) d5 ~) L x7 g0 j
kernel.msgmnb = 65536
0 I9 @9 E) h y& G# e$ Y4 P8 ykernel.msgmax = 65536
! \6 s9 K9 k* F* \kernel.shmmax = 68719476736$ i9 h) I+ ?, _+ c6 n& `
kernel.shmall = 42949672964 j7 [* G' T6 q. }0 J7 m
net.ipv4.tcp_max_tw_buckets = 6000$ @% R! ]) F+ m- `. X
net.ipv4.tcp_sack = 15 H% K: ^$ E5 W( h! [4 ?
net.ipv4.tcp_window_scaling = 1
1 W) \/ S" L: Z- n7 g2 y- }8 Wnet.ipv4.tcp_rmem = 4096 87380 4194304
6 q6 T0 g; A7 E8 i6 Jnet.ipv4.tcp_wmem = 4096 16384 4194304% g2 T; l9 |2 y9 P1 h
net.core.wmem_default = 8388608# O2 Z, `$ w9 k3 q- X7 ]+ ?
net.core.rmem_default = 8388608; O( X' { H, n5 ]0 ^
net.core.rmem_max = 167772161 _2 d" Y0 U" ^) i2 N7 e( z0 a
net.core.wmem_max = 16777216
! Z9 K" |" p" i' }# R2 V6 unet.core.netdev_max_backlog = 262144/ C1 B5 W8 l% H9 v
net.core.somaxconn = 262144
3 k- G( \! v1 N: N# a9 [; t8 xnet.ipv4.tcp_max_orphans = 3276800
, N0 \ P5 Z+ u% @5 Unet.ipv4.tcp_max_syn_backlog = 2621442 y+ w/ t# h% e. ^! }
net.ipv4.tcp_timestamps = 06 f& @5 w2 B, k
net.ipv4.tcp_synack_retries = 1
9 t5 ]% H) Q/ N. Jnet.ipv4.tcp_syn_retries = 1
2 ^& i1 u" ^* ]. }% Y! `4 Bnet.ipv4.tcp_tw_recycle = 1
2 B9 F/ H" L% k; q, P" b. qnet.ipv4.tcp_tw_reuse = 1
, J# v+ w) @4 d& pnet.ipv4.tcp_mem = 94500000 915000000 927000000
2 J7 [+ S( c+ i$ l: nnet.ipv4.tcp_fin_timeout = 1' j, M7 Z. M# X s% x0 y K
net.ipv4.tcp_keepalive_time = 30, V6 M- F' ^+ M1 h* A1 u
net.ipv4.ip_local_port_range = 1024 65000
' j+ z4 ]" l3 @& o& q0 @7 Q
0 Z% A& ~, p9 j) e% \
' O. K2 ]+ b! k2 R$ l* S) V下面是一個簡單的 nginx 配置文件:nginx.conf
( f+ Y% J4 }8 k/ }8 K7 m7 f& Zuser www www;% k& f! o4 M" `( H7 h7 Q5 G' d
worker_processes 8;, h, p# l) \9 w% I: v" k
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
& q7 C) s$ r: l7 X. Lerror_log /www/log/nginx_error.log crit;! ~5 p4 H4 _! v3 _% }
pid /usr/local/nginx/nginx.pid;& w q: o/ l C' {" k( ?; ?
worker_rlimit_nofile 204800;
1 J; T- S) o' r' l4 Devents
$ h- e9 N1 d) |& k0 t. j! ^6 w6 w{
: a1 Z& V) R6 S# @7 M! F use epoll;) I$ |% \$ U/ b5 M
worker_connections 204800;
) ]* O9 {* E* k) }6 u a' p# o}; C$ {! ^8 \, M! |# \
http
1 d* ~7 {- k7 A! @' s7 H0 I8 c{" R8 Q2 Z" E- k5 |
include mime.types;9 z- _$ g( d1 Z" `% k4 s7 g
default_type application/octet-stream;# }2 H5 ^( R) P5 r
charset utf-8;# c- r6 r# E8 z4 @2 X/ d
server_names_hash_bucket_size 128;3 o9 }4 s2 J, S+ V" t) i
client_header_buffer_size 2k;( U, A" g* f3 E: m% z2 @
large_client_header_buffers 4 4k;( U& F$ Y' u7 L8 N) j' p5 n
client_max_body_size 8m;& e7 Y x6 S. i6 o- x0 f" i4 b
sendfile on;% A. w6 K! c# r; A
tcp_nopush on;) ^% ]. g; l$ I+ r5 O
keepalive_timeout 60;
- Y$ N( q5 w' g9 a. d5 e6 p fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;: r8 k7 Z8 s' s9 Y, \3 \5 Z
fastcgi_connect_timeout 300;
0 e) A& a0 u8 |5 b( L+ i fastcgi_send_timeout 300;
$ T, o& H4 \) s! b3 I0 o fastcgi_read_timeout 300;
) w7 I! e; \& b! F+ \ fastcgi_buffer_size 16k;
, ]% ~; x: \) m9 O fastcgi_buffers 16 16k;
: D. G, q% [, F/ i: V. p- ?) F! { fastcgi_busy_buffers_size 16k;
# Z' {/ B& a+ h, l" m* E/ H fastcgi_temp_file_write_size 16k;
" ?' s+ D1 d1 U5 a fastcgi_cache TEST;, g& J# U% D6 _# j u: _+ ^
fastcgi_cache_valid 200 302 1h; [& L1 H" l: R' @9 l- J& F9 i
fastcgi_cache_valid 301 1d;
1 V$ A( v$ p* v. L# X2 E$ H+ e4 I fastcgi_cache_valid any 1m;
2 O' h' S& x7 y6 {& O- m( w8 [' Q6 H fastcgi_cache_min_uses 1;7 G9 A% p7 Y1 E% t" g
fastcgi_cache_use_stale error timeout invalid_header http_500;$ f% e2 W2 [% ], w
open_file_cache max=204800 inactive=20s;2 m n4 W+ I7 O8 H6 e8 S1 L3 {
open_file_cache_min_uses 1;# p- e t7 R. e
open_file_cache_valid 30s;
W: F+ U$ a6 F9 V: f! r+ f6 v6 Z tcp_nodelay on;
* k3 p0 a. E8 E% m& o gzip on;7 v1 d8 m2 z& b# W# m' {
gzip_min_length 1k;1 ^ t! E6 C9 e6 X0 x- T3 o
gzip_buffers 4 16k;
6 `. j+ F1 j' L0 q# g- @4 _ gzip_http_version 1.0;
. P6 O# y. j' U5 b gzip_comp_level 2;
9 }+ ~8 n/ `; f gzip_types text/plain application/x-javascript text/css application/xml;
3 F6 C D L+ C; I& W7 c gzip_vary on;1 l* [% o8 T& \& S5 O; S6 f
server
* I0 g1 B4 |) k0 Q* ]5 l6 K- H {+ t4 S- Z3 S, K" {) Q
listen 8080;3 P n6 e2 q# `
server_name backup.aiju.com;8 e: w; [$ ?; z* |9 I' {( T3 |
index index.php index.htm;4 u( p! B6 j w$ C8 D
root /www/html/;$ z; [7 L4 \% R4 Q- \" W9 C9 z
location /status
# Q8 A& v+ |8 R+ j( Q5 F, C {
l% T' p X9 T, \/ n stub_status on;
- N ~! d9 D. Z$ d+ B8 Z: i; } }
# Q9 M5 _' L( ?1 p1 g u$ {5 Z location ~ .*\.(php|php5)?$
* o4 g" U" h! O1 ?/ z0 u {3 v) D' g0 ?: o7 G. ^$ j
fastcgi_pass 127.0.0.1:9000;
+ w' p; i" b5 g+ s' E: u fastcgi_index index.php;6 I$ \, {+ d- Z6 N( a% A
include fcgi.conf;; {, L+ o, E; [1 v7 `: |
}
2 y' @! j8 y# w7 r location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
/ D. r. W5 K$ Y0 Q, N {' V( N3 V7 t* b
expires 30d;
2 f, G# `; i/ h/ R8 T% b }8 d/ J; I# k0 L4 N' l( |
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
/ J3 W+ \$ J& ]' U+ ` '$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
1 c3 V$ ?8 Q' H2 Q: a& @ access_log /www/log/access.log access;
: i; m" m: U4 x, L8 [! T }8 S1 K9 x: \0 w: m; P/ Q: `# z" L
}
! R, W6 q3 K. f" a8 v: P5 B% R( A" \, P2 q
" B) d$ n) [% v, s* V關於 FastCGI 的幾個指令:1 |4 R" u& T" Z9 Y) E! o
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
2 k" [2 @; i% L/ m這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
/ H {/ n( \2 T4 }9 R9 z1 W4 Dfastcgi_connect_timeout 300;* y$ \4 u- H3 w' y0 R" v' a4 K
指定連接到後端 FastCGI 的超時時間。9 v' `/ v0 `7 R" P; E
fastcgi_send_timeout 300;5 W# F: Z' G8 G: Y
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。8 _ N, i' a% w/ {2 T7 j* R
fastcgi_read_timeout 300;& |8 n3 C. ^- r! @. `* ? l
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
/ z0 s' M0 s4 M8 s0 w/ Pfastcgi_buffer_size 16k;
: t. v D$ Q% c! _# E指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的0 U9 }3 t4 v- L2 M3 S* [: w" d
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
/ e# m. `0 b8 |; T& c1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
8 X# q. M- }: l, E小去緩存。
# b/ ]% y( t% H- gfastcgi_buffers 16 16k;# m# y5 g- s+ S! g- m
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,3 h Y' k! e, U) o7 ~
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
! i8 H; e' f5 ^8 \8 N8 z! T# `當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
5 |- V* V7 ]/ T& b. I4 g站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
# l! d% H c. e |置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
E. x, e7 T, P Y# y64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
+ J8 x* ^2 P( Y! n: N/ G, z會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
2 F3 U% Q$ p) ]: S/ Wfastcgi_busy_buffers_size 32k;, z5 H+ O7 Y+ ]5 c6 R' V
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
( T5 l' a! T/ h$ I- hfastcgi_temp_file_write_size 32k;
/ @7 M. l+ z: c在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
3 u' D1 {) o6 Y, ]4 x& x5 b; mfastcgi_cache TEST& a4 T: X+ n: T/ v- { w" b4 D
開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
" {, f; m4 a( C, P- ?; x但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
/ u) H; i* B! C" Tfastcgi_cache_valid 200 302 1h;
% D. p* H' U2 M. l- s3 Z6 m& z0 Gfastcgi_cache_valid 301 1d;2 ]% w" r( o% |8 m: J0 e" T
fastcgi_cache_valid any 1m;
4 k5 i! ]( M2 h- ?為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。2 e" w5 Q0 Q v5 {5 O
fastcgi_cache_min_uses 1;& E- h) |0 v I! t+ u. u
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被
5 D6 l6 o( V" L使用,那麼這個文件將被移除。
8 V" W) X7 i8 O. e# Kfastcgi_cache_use_stale error timeout invalid_header http_500;* B* O2 m* c( \( _0 H3 }8 y
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。3 K4 o. `- R/ f
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理5 k- B0 Y' ]7 O, t% p
FastCGI,可以修改配置文件中的以下值:
! j( w: O, ?& N<value name="max_children">60</value>
8 t8 b& M7 j5 D8 ]& h8 r同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。( l' F! f6 Y! `6 [
<value name="rlimit_files">102400</value>. B6 S& R" C+ n5 {# o3 Y$ Q
最多打開文件數。3 \# ]$ o% X6 J9 @* v
<value name="max_requests">204800</value>
8 Z$ r. \. u) `1 l! A/ c9 Y# V" l每個進程在重置之前能夠執行的最多請求數。) _4 W; \! [" C
2 e; \4 p: h8 o7 \ u9 n- P% k1 k; ^- y% C; i
參考資料:
: @! x- Z. H7 `) n! G9 @8 R% whttp://demo.ckan.org/dataset/daf ... /download/nginx.pdf8 X7 E6 t! Z5 c+ k
http://blog.chinaunix.net/u3/105004/showart_2087155.html4 w9 P1 T1 Q, `3 d7 c7 L
http://nginx.179401.cn/
: B5 N# I3 f0 Q: n$ J# Ihttp://blog.s135.com/nginx_php_v5/6 u; V( H1 p6 \0 i2 T6 B& m
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
' I t5 ]+ x# Whttps://www.netroby.com/view/3128
( Y2 }3 }& X7 y4 ~ @: efastcgi 快取:! B$ v |9 L+ p2 g7 x% I
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/' o# G9 v9 ]' \6 T% P' a
其他:, N/ k5 F- T% A; j
nginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
/ `8 J @. i0 g" K* }& _nginx優化:http://www.jianshu.com/p/2184654ba4b2) N) P4 S' d/ A$ C" N7 D
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on
M; P8 O: K1 V! i5 N, ]7 _. Y
7 ~& O) ?: A) U* r$ R
! {6 v. R& V# q( M( P/ @2 C4 h' X( x N4 t# p c( w, Q# @
|
|