tid=48521&以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
! S& a% ~$ Z* i7 N* u7 ]. t% x一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:! ?( M% e+ |+ T) Y" B+ i
worker_processes 8;
; g8 @: o, k/ ~7 u- I+ v Anginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
* n! F; b) g X8 [1 R% pworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
) q3 ]4 W$ x1 v/ a為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
7 l4 u! j/ s5 v# e, U7 @worker_rlimit_nofile 102400;
3 J& X& H; J' P& T4 w這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數 _- T& |$ Q3 d7 N% t7 k. @
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。3 J, d. k* l) H& b& l3 q6 D# ^9 n7 w
use epoll;5 y; h2 g. i* j6 L/ G& H5 b
使用 epoll 的 I/O 模型,這個不用說了吧。
8 K/ O6 Q* t5 q( X8 q1 dworker_connections 102400;
6 U4 T' u: X; [$ K& X) {8 w每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。% ^9 E5 C! l# w& W9 Z
keepalive_timeout 60;9 r1 q, ?1 `8 ]. G5 ~* B/ {9 Y7 @
keepalive 超時時間。
, L; T Q# ]6 a* z) Pclient_header_buffer_size 4k;
7 O* D2 f+ K0 n7 o7 U/ i客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
5 ?2 Y/ h: t7 Z& i2 U. M於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
" j" ~1 `! S1 j' U1 x+ ?& ^open_file_cache max=102400 inactive=20s;
$ o! s9 [4 Z, M6 R7 C) h$ x5 D$ |這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時+ l7 v* @$ C9 k
間文件沒被請求後刪除緩存。
/ f/ f( j' G6 P2 q5 v5 D7 \; d. mopen_file_cache_valid 30s;
' N8 Y% P U/ g' T% m這個是指多長時間檢查一次緩存的有效信息。
) M8 P# B, P3 \9 O* mopen_file_cache_min_uses 1;8 C4 w7 x) |: c6 `) {
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打8 k* v i- v: V% m% _
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
8 |) P# [8 m6 m9 }4 F# A3 q5 u. E- r% A& B
( x$ M, j! c5 S" l9 \. E
關於內核參數的優化:
2 D; o3 j% m2 P# m B, b$ snet.ipv4.tcp_max_tw_buckets = 60007 V- Z1 W( \" E! N3 }; J
timewait 的數量,默認是 180000。+ }0 i: v' A* y. {& Y1 E- l- D2 [
net.ipv4.ip_local_port_range = 1024 65000
1 m$ f7 `( `' j允許系統打開的端口範圍。) W3 j, X8 v- a7 _
net.ipv4.tcp_tw_recycle = 15 L. [5 d+ U8 a
啟用 timewait 快速回收。5 d, A) h% N1 ^+ w: w
net.ipv4.tcp_tw_reuse = 1* B( [7 u) }) H1 L
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。+ M0 I+ M# a3 k2 |8 ]4 z" }
net.ipv4.tcp_syncookies = 19 @( e; E$ c1 Z. T9 `% U4 M
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
+ S! m& v) |( G! rnet.core.somaxconn = 262144
! A2 T0 f, y" c! b1 c2 iweb 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的+ t1 `% Y; z z- v* B
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。3 E( N; p. h$ y2 M. R" {
net.core.netdev_max_backlog = 2621441 z& z5 @: Q# D+ L
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。. ?$ _- J" a+ u# r+ Q, i
net.ipv4.tcp_max_orphans = 2621445 A) z# r5 g& n) ~/ u q7 S
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
0 _$ j* M" y3 P印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值' ]" K7 }; P' P/ u, B% |
(如果增加了內存之後)。
9 M( ^$ i+ S! \& k& Qnet.ipv4.tcp_max_syn_backlog = 262144+ y+ W, y8 |: C$ W! Q
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
; j1 V0 k3 g8 k; y7 v6 s統則是 128。
! s$ _ r! s/ k& O! g! {net.ipv4.tcp_timestamps = 02 {- ]8 q7 @7 N% y7 q
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的, Q& ?2 q: q- Q% q5 O
數據包。這裡需要將其關掉。4 ?* W2 x( b+ [4 o( ]$ L
net.ipv4.tcp_synack_retries = 1
$ `4 w1 z9 ~: I6 o: b) ?/ Y$ X為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次
- G5 `2 p5 w6 v9 o握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
: W* g& a/ d( H: e0 ]net.ipv4.tcp_syn_retries = 19 K* l$ C; K# W) i
在內核放棄建立連接之前發送 SYN 包的數量。
; O5 L5 W6 I; lnet.ipv4.tcp_fin_timeout = 1
% j' H7 i3 y5 p6 P' b e6 [5 ^4 \如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
9 U4 p# E4 C* j8 q: s% `至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕( P$ D$ Z/ t6 {. j
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最# F! ?" w5 C3 a1 k
多只能吃掉 1.5K 內存,但是它們的生存期長些。
/ R4 d9 X( D8 F% ?/ A4 L# [; o/ Ynet.ipv4.tcp_keepalive_time = 30
1 _& q) m7 }4 e. }當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
0 i2 u6 C9 }& x+ ~
1 G0 w# Q2 }9 S& ^" b* U$ ~
0 U$ N# {9 }' O7 k& o4 O' Z* f- y( [下面貼一個完整的內核優化設置:
) a% d2 t3 [4 Z- V" Dnet.ipv4.ip_forward = 0$ d, T8 F$ }- C. ~4 _! u
net.ipv4.conf.default.rp_filter = 1+ i4 Z2 d: f1 f- @! a$ O. {8 S
net.ipv4.conf.default.accept_source_route = 0( }/ n* a, y% v
kernel.sysrq = 02 ?% r+ z' j* j5 w3 ? u' q
kernel.core_uses_pid = 1
' _5 D* N2 h$ o" E$ L1 hnet.ipv4.tcp_syncookies = 1
3 b! Y% E3 w6 ~: Z, W" z1 J4 Dkernel.msgmnb = 655369 q$ [" R. `- Y, z: y
kernel.msgmax = 655368 g' p" @; i8 c6 i' v3 o4 p- l$ O
kernel.shmmax = 68719476736
8 F& C6 T D8 F* hkernel.shmall = 4294967296& T# q3 `8 N- h) G! H* g
net.ipv4.tcp_max_tw_buckets = 6000
/ `) d' E3 G( h+ }! k" K K) jnet.ipv4.tcp_sack = 1
; f* f" K. `6 y7 C; Q6 s8 gnet.ipv4.tcp_window_scaling = 1
$ r% c3 L4 G+ w1 k; J$ d* r# Y1 wnet.ipv4.tcp_rmem = 4096 87380 4194304- f6 _2 [% ~: L* N6 ^
net.ipv4.tcp_wmem = 4096 16384 4194304. p% \7 j$ u" M. h
net.core.wmem_default = 8388608, t) s- X3 F5 |
net.core.rmem_default = 8388608
7 c& b: \! b0 @; B8 Rnet.core.rmem_max = 16777216
2 N. c& g' ]$ N; S2 `) ~net.core.wmem_max = 16777216
0 Z e6 c& ~5 ^+ y# |) a+ l8 Onet.core.netdev_max_backlog = 262144
$ y( m' f4 d$ g7 ^% ]3 hnet.core.somaxconn = 262144, I- `8 ?# Q9 ]7 Z6 g
net.ipv4.tcp_max_orphans = 32768002 I( t& ?6 v" c8 q
net.ipv4.tcp_max_syn_backlog = 262144
0 p$ W7 g# f0 _9 Znet.ipv4.tcp_timestamps = 0: S+ O8 l1 L9 J: w$ L" g
net.ipv4.tcp_synack_retries = 1
; U s1 Z& H6 G' y: e0 u! Snet.ipv4.tcp_syn_retries = 1: B& m& k( p5 h7 e L4 t) j
net.ipv4.tcp_tw_recycle = 14 v8 {- L5 D. h( i
net.ipv4.tcp_tw_reuse = 1$ K0 a v; E$ ~
net.ipv4.tcp_mem = 94500000 915000000 927000000
. N) I; |! u8 I" b! n/ k' |net.ipv4.tcp_fin_timeout = 1* a& x* X2 K5 g, f: r, t
net.ipv4.tcp_keepalive_time = 30' P. s# p7 f0 K
net.ipv4.ip_local_port_range = 1024 65000' R0 {7 A4 v% T% h
2 m3 ~7 }. P" g/ F6 B
( M1 G6 m! y& ?0 I1 t: X+ i
下面是一個簡單的 nginx 配置文件:nginx.conf4 s; W: ~0 Y3 Z; u
user www www;* \) S2 R- a# X" a$ n; y" P
worker_processes 8;
! v9 _; t5 \2 x$ _worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;: T2 w$ C1 r% n. u* ]. R3 D
error_log /www/log/nginx_error.log crit;9 p% g% i& E* M1 ^& g, [3 x
pid /usr/local/nginx/nginx.pid;
% Q" ?9 b+ R6 c& \7 z' g5 mworker_rlimit_nofile 204800;0 }, P: `* N5 t
events9 d$ A% h$ N8 W: c) Z
{
+ J+ Q: U7 R, X, \; @9 T- Y( B3 D use epoll;1 X& D; m2 w+ U* H; S f% u5 s t& n, P
worker_connections 204800;
: J1 ~4 N6 ~; g}
; u* F) C3 {8 t5 n$ rhttp9 O3 p9 H0 P8 E. N: a* J
{
4 ~0 E, y( s6 e# D, ?9 Oinclude mime.types;
! c6 Y# Z. v( _3 b2 O; [' u default_type application/octet-stream;
0 a& r0 N+ }1 H; E charset utf-8;
" R1 [7 [$ Z" ~+ C1 |4 c. G' i server_names_hash_bucket_size 128;2 u3 z$ y/ i/ s
client_header_buffer_size 2k;
7 u. T# a% o1 R5 U" ` large_client_header_buffers 4 4k;
: Q8 f/ q, x! C/ s client_max_body_size 8m;
& t3 O+ b! {* t7 v" Z. u sendfile on;
) v9 G4 C' U, Y tcp_nopush on;- k" W( i: R1 D' D; j4 Q- s- f
keepalive_timeout 60;
/ @+ A5 t K) `+ d& z$ a fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
; `$ H8 ]) E4 c+ } a' B, y fastcgi_connect_timeout 300;- Y; L; s# N: j! C* S! j' u5 r
fastcgi_send_timeout 300;: d( F7 b) v% ]4 _" n
fastcgi_read_timeout 300;
: F6 a- I& H# N8 b& U fastcgi_buffer_size 16k;
1 D/ ]/ M7 p" x; D. R# _7 d$ @ y fastcgi_buffers 16 16k;
9 [" F/ t! y/ \4 }! `: e t9 u fastcgi_busy_buffers_size 16k;0 n! |- _/ U* v6 L
fastcgi_temp_file_write_size 16k;( H) s* d/ V5 L( E+ i
fastcgi_cache TEST;
! o% G% X8 v, j: D fastcgi_cache_valid 200 302 1h;
# y" B2 ^) R( }( H fastcgi_cache_valid 301 1d;8 O m; c( x/ i S0 s6 ]( j
fastcgi_cache_valid any 1m;
& n2 f7 I' V& Z7 v; o fastcgi_cache_min_uses 1;. T, O" }+ X5 \5 E% P, }3 M' k' w
fastcgi_cache_use_stale error timeout invalid_header http_500;
% I/ h# E% |% F0 I J- g- A open_file_cache max=204800 inactive=20s;
8 e# h$ k2 \) b8 o7 ~: o: G open_file_cache_min_uses 1;
; @: W% i7 W. n1 O4 [6 Y- I8 q# X4 f7 I open_file_cache_valid 30s;; q$ V- Z2 u) q5 Q2 F7 [
tcp_nodelay on;; k3 V; H7 x9 B8 L4 X
gzip on;1 \! K+ `! Q8 A/ h& N, F
gzip_min_length 1k;
8 d' R* P* ^" n( ?" r gzip_buffers 4 16k;
: s1 U' j$ B U2 q- a* y gzip_http_version 1.0;2 C) V( f* n) M0 p, V1 f: S4 R
gzip_comp_level 2;
T! o* v) P6 |% v- a gzip_types text/plain application/x-javascript text/css application/xml;
& l8 r0 N5 ^1 K5 ~7 d9 S gzip_vary on;2 Z0 D/ l( p5 W
server( Y' ]! Y+ ?& Y( c9 z
{* M" {8 g H6 x+ m0 x Z" Z8 ~
listen 8080;
4 _: ~3 {5 T6 F0 d1 Q2 v9 B2 W server_name backup.aiju.com;+ ]1 _6 ^+ D% {
index index.php index.htm;: }0 O; [) F. O0 Z2 z
root /www/html/;
$ T1 r1 z! Z! X location /status) i* N) r5 N" Z/ U" x' ?
{9 @+ a( F- p+ s8 o
stub_status on;1 X2 O& b0 G E+ o
}
2 Y' i. v( z9 z/ x4 D& N" [" ^ location ~ .*\.(php|php5)?$
5 }# }% E% ?) K) q' b {
8 @- L k/ b# j7 w fastcgi_pass 127.0.0.1:9000;! m G# S: s& a# z+ J, s* V
fastcgi_index index.php;* E7 e) R# S3 P! D8 `( E
include fcgi.conf;1 w% k7 H/ @: N, m' [2 d
}, o9 }6 P; U8 ^% v& Y7 t
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
) L* o# f# T& M- x5 v {
9 O/ T' f: {- G: ]4 a5 y5 i, R T expires 30d;
2 W# X1 u6 S" a }% U( o5 d$ G+ o' j% x
log_format access '$remote_addr - $remote_user [$time_local] "$request" '' L# N% }8 i7 R
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';+ k2 g" ~% j& S$ v+ E7 b
access_log /www/log/access.log access;* F2 F9 }' \/ ^! J2 {( h9 t
}
/ z4 P$ l) D# n) |- H+ j1 \6 j}
* }3 E# O. ?( D+ K% S
4 `8 n4 T% n4 m1 M) U6 c關於 FastCGI 的幾個指令:
* d: V5 r" z- u+ xfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;8 ^2 r1 ~5 H: a! Z a
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
$ ?' `$ _! U- E, m( n8 }. Y5 u. b3 sfastcgi_connect_timeout 300;
5 r" M. _9 k* h" r4 ^指定連接到後端 FastCGI 的超時時間。
( f7 u3 `5 Z5 O3 t4 w9 @* ?# E: x" Lfastcgi_send_timeout 300;
( p# e, u2 O9 A: X向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。# N2 w* T6 i; C8 P* c3 i" R
fastcgi_read_timeout 300;5 j- R- F: H" L L9 D4 H
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。5 D& Z0 m9 m% m. `0 n6 j
fastcgi_buffer_size 16k;
2 @& O8 M6 O; ?. ]0 o) D指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的8 y7 e: f# q1 V' \$ Z6 ]5 X
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過) w: T' J+ a( U! G' U3 b, w) E
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大* o/ H9 [% w- J; U( o+ j- I
小去緩存。
7 ], e, n! v! x M3 b' u: s$ ?fastcgi_buffers 16 16k;( D9 ~# ?7 n8 P
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k," Y" R* }. `- }3 Z- J( L( M2 z2 Z
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,) E% j: r+ r7 X3 t
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
3 s, B6 e8 b+ }/ O2 I# }站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設& @6 P+ q; t! t- s, b8 u4 y) [
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
2 m- e2 \6 X2 H( B' E: A }' k64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
4 ^ Z! O8 ~4 p& R會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。2 x$ a4 A, U: {
fastcgi_busy_buffers_size 32k;7 C& j* u* O5 D0 n' N: k, f
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。2 z0 a% l+ Z# P4 G
fastcgi_temp_file_write_size 32k;7 A# r7 Z* s, ?5 O- W
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
! Y7 W% C5 _7 M7 \7 M! `fastcgi_cache TEST
4 v: K5 G4 L% q; Q5 s7 [開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
W+ ]) i9 J4 N6 R7 ~) B! R7 ^但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
* Z4 o8 Y% w( V# Cfastcgi_cache_valid 200 302 1h;' a. }* k6 [* Z) [" b# A1 X4 S) _
fastcgi_cache_valid 301 1d;6 J' O; [; Z4 K ?
fastcgi_cache_valid any 1m;
' U' V! F1 I0 B9 A r為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。 a2 q \5 i7 Z7 x1 D/ S8 P* M
fastcgi_cache_min_uses 1;
* w6 }$ ]$ z" d3 J2 `$ z* t& l緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被
4 z/ ?, k$ C t! I# _" E; D& P. J使用,那麼這個文件將被移除。
1 |! ?% G" J& Afastcgi_cache_use_stale error timeout invalid_header http_500;
0 H" l$ C% A% b) h7 Y不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
2 B! a0 k" ~# L/ k1 D% L以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
' y7 w1 O- d0 g* p4 CFastCGI,可以修改配置文件中的以下值:
' V) r- D/ l) |+ \<value name="max_children">60</value>2 |, I U0 W- }6 F; X" S1 H) i
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。; P- W8 H- ]$ y0 ^ X7 g3 A
<value name="rlimit_files">102400</value>
6 f' W; ^, S* X( p! u6 h! ?最多打開文件數。5 D# J, j4 T3 j5 K; a) O; a8 _9 L
<value name="max_requests">204800</value>) I) X! t) `& u2 D0 s2 D$ ^
每個進程在重置之前能夠執行的最多請求數。/ s) B1 h! P/ ]4 R6 N4 o
; z4 L" O- p) h6 N ~& E* D0 z
( s# z' v5 n D: |) v
參考資料:3 S6 e2 R! O: @0 ?: W0 ^* p
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
; K1 i$ y0 S Lhttp://blog.chinaunix.net/u3/105004/showart_2087155.html6 s2 q& ~ e5 {
http://nginx.179401.cn/
. P) C6 p% [3 w- s( jhttp://blog.s135.com/nginx_php_v5// _4 X m1 s; b/ ^+ w7 W
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html# q* o' W0 l5 b# a2 X8 p1 S1 H
https://www.netroby.com/view/3128
: d) j5 i( Z7 I3 S! U8 O7 t! Qfastcgi 快取:
6 b! f5 V' v* E9 a( Y2 Ehttps://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/1 [" Z l: Y! E" M' F, ]
其他:
% m/ H6 y4 p: g) y# o2 Enginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
0 D, L. l, N9 @" M+ x: dnginx優化:http://www.jianshu.com/p/2184654ba4b2) x9 S( d0 z( v* w" q: \
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on8 ]5 {/ N+ i7 d1 C# }% m( m
. A, n& @/ V6 a& W1 u8 a* V- s
* N4 b" N7 K0 }1 r8 M3 K
+ G% e" F( N, m+ k% ?0 X4 g; ^: F+ @, j" i8 o
|