52AV手機A片王|52AV.ONE

標題: nginx優化(針對nginx.conf) [打印本頁]

作者: IT_man    時間: 2016-10-1 22:08
標題: nginx優化(針對nginx.conf)
以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf% J% H( E/ t2 X0 m8 M' V: ?
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:0 P2 a* K, C- j: d6 J
worker_processes 8;
: I& n, K/ a+ |% n3 |/ n3 [nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
: ?* I9 U% l: Z7 |% A4 iworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;  i. b" e1 r8 U1 w) {* y/ t: F* i
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。. U) a5 H/ I* h1 w0 n
worker_rlimit_nofile 102400;
5 v0 _( M( l! E9 k這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數4 |1 b* b% J: _: a$ o; Q
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
3 i$ y* Q7 D7 T) Fuse epoll;
! \/ ^7 ~  a' z3 K. P7 D1 D; i+ {- E使用 epoll 的 I/O 模型,這個不用說了吧。: f& G! w" o; \7 M4 v
worker_connections 102400;
& z" _( O0 l: R; A, N. t8 `( w' N每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。
. W& D, Z3 M& Lkeepalive_timeout 60;
& g& a1 v. e* @keepalive 超時時間。0 H7 g6 p/ k* a+ y
client_header_buffer_size 4k;
: |' v" x7 M0 B( t& g5 s$ n客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由1 f$ q' R3 h# Q; k& o$ l2 R; Q; Z
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
8 y5 s" h, `3 ^2 e  C, z8 wopen_file_cache max=102400 inactive=20s;7 C7 ^* A4 E3 k  Z1 F3 L1 T
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
/ o% v" G) q' E- W( W: F5 X間文件沒被請求後刪除緩存。
/ ?: s# \' C0 v2 k# }3 _' K; k8 oopen_file_cache_valid 30s;! B% J) [9 f8 Z/ l! L2 Y
這個是指多長時間檢查一次緩存的有效信息。
3 Q6 D2 n3 R( `9 N* `- _8 xopen_file_cache_min_uses 1;% N  ?+ ]- v2 {) a8 I
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打; z% O$ x, _$ \; S* ]  L
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。, }& Y, E  z, g
( l- r/ Y/ B1 i" E0 q% b2 e

- m' l/ P" K! ?2 S' V7 J關於內核參數的優化:- l+ O8 l- e  p- G3 h, U
net.ipv4.tcp_max_tw_buckets = 6000
, Y4 W3 n2 i- F$ P; `' d( Vtimewait 的數量,默認是 180000。, R! I; z, h6 Z0 P/ O) C
net.ipv4.ip_local_port_range = 1024 65000
; o# d0 j  e4 d+ G7 w允許系統打開的端口範圍。
# a# }- H( m5 |/ ]; X+ Enet.ipv4.tcp_tw_recycle = 1$ i) o$ y9 P  }( O- B+ ]
啟用 timewait 快速回收。+ U" s5 D$ W! |1 p$ y% S; P- ?4 A
net.ipv4.tcp_tw_reuse = 1
. w$ g' ~( K5 ?& x- P) Z. B4 o開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
& e6 k6 _5 h9 X% A8 A6 s+ @0 knet.ipv4.tcp_syncookies = 1
. n- I( e8 _& [開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。9 a  e; q  a. @8 ^6 _
net.core.somaxconn = 262144& W2 Y" m7 k8 Z; h5 N& x( k
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
" ~; n0 v! O9 x! k; N+ KNGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。9 B* _  P  F" J- ]! h5 p" f
net.core.netdev_max_backlog = 262144: a7 K2 @* _/ Y" [- @9 H
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。% @9 ~" W# n7 I4 y
net.ipv4.tcp_max_orphans = 2621441 F1 Y1 Y: u" w
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打4 O- E$ g, p1 Y9 d  w1 ^, \) U6 T
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
; E! ~# G8 Z3 z; p, H! T% h( K8 s(如果增加了內存之後)。
. h5 V) A, g+ Y# ~0 |net.ipv4.tcp_max_syn_backlog = 262144% E; H# }# J# u0 D) o
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系2 a: G$ K0 p4 z3 e- Y- J3 Q
統則是 128。
* k) J+ [( `  v1 [* Pnet.ipv4.tcp_timestamps = 0. l; S0 f7 w/ ]: Y+ V+ z8 W0 X
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
+ m% Y& S' I$ T數據包。這裡需要將其關掉。- f6 o9 c9 i" _
net.ipv4.tcp_synack_retries = 1! b2 I* p% z; l* D; v! t, S; @& O
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次1 G; Y; L; Q$ j0 n4 c/ H
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
* d) @, O+ T* L- b! Nnet.ipv4.tcp_syn_retries = 18 B, s: F2 G) p, Y7 r- Y/ M
在內核放棄建立連接之前發送 SYN 包的數量。, ^. e0 e7 a9 n
net.ipv4.tcp_fin_timeout = 1
9 w+ T: V  C2 V如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚* w& R$ J: g$ s! K- r( s7 E. F
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕5 o# e% }  _) [2 I3 P; f
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最  V# c8 Z% I) }9 ?1 s/ U: G
多只能吃掉 1.5K 內存,但是它們的生存期長些。0 k) N0 y& q. c! r/ p
net.ipv4.tcp_keepalive_time = 30
3 r* H+ J+ R0 z% V當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
+ R% M" `, J/ }& n* R
* {# v& P, B( C8 ^+ Z
/ Q6 y9 T" N! e; G下面貼一個完整的內核優化設置:
' q1 Z# r8 K# ^0 M: Mnet.ipv4.ip_forward = 08 G: l3 @0 y" Q8 ]3 o
net.ipv4.conf.default.rp_filter = 1
* A3 Y/ L' ~: N' Z( n/ Anet.ipv4.conf.default.accept_source_route = 04 [- a" E+ u! x# ]1 F7 q
kernel.sysrq = 0- t& N) g7 O' ?9 x" _6 N8 J
kernel.core_uses_pid = 1
% ~: C. t: X4 P- jnet.ipv4.tcp_syncookies = 14 [; p& z% l- X( B1 @
kernel.msgmnb = 65536
7 [5 O- l7 m* H+ E6 rkernel.msgmax = 65536
, y; `# A  [; n' Y: [* Dkernel.shmmax = 687194767362 r! H  V3 B! O- T
kernel.shmall = 4294967296
1 h1 Z" P! c" _4 Q2 C; C8 Fnet.ipv4.tcp_max_tw_buckets = 6000
! m! Q' \' T2 w) l, q0 dnet.ipv4.tcp_sack = 12 U8 |& n8 J0 M
net.ipv4.tcp_window_scaling = 10 ]: x* p. B; G/ |
net.ipv4.tcp_rmem = 4096 87380 41943048 i' g" Z+ [1 x# X  \
net.ipv4.tcp_wmem = 4096 16384 4194304
- k# G( R) e9 A$ e8 }9 B9 ~6 inet.core.wmem_default = 8388608, E$ H. y3 A8 P; O6 I+ t: N2 ^: m
net.core.rmem_default = 8388608
6 D* `# R/ M0 h3 r/ D  q" \+ anet.core.rmem_max = 16777216
  m) t5 d, l0 y' o) H8 cnet.core.wmem_max = 16777216
: P. Z( D5 s) P  g" S, t, E/ qnet.core.netdev_max_backlog = 262144* p) l9 |, @* T! C( x; [& e& D/ g: o
net.core.somaxconn = 262144. T# B5 u% V$ R8 r: S. @$ A8 a
net.ipv4.tcp_max_orphans = 3276800! u7 o0 t4 P# M" T" X
net.ipv4.tcp_max_syn_backlog = 262144
; O7 [& o0 T1 T; y7 T2 s7 r" Mnet.ipv4.tcp_timestamps = 0) B1 ~+ P" _/ W( V; I. [, d
net.ipv4.tcp_synack_retries = 1
* e# X/ t* t# C0 v2 P1 W( Q" G  Nnet.ipv4.tcp_syn_retries = 1
$ f2 t& k1 w7 n% enet.ipv4.tcp_tw_recycle = 1
) h: O2 M! |" j- _' b/ G  Cnet.ipv4.tcp_tw_reuse = 1
( s3 ^' g' i/ |net.ipv4.tcp_mem = 94500000 915000000 927000000" ^2 J7 B0 [7 N2 S/ t5 o
net.ipv4.tcp_fin_timeout = 15 d& M' y# z" F4 a, Z* V
net.ipv4.tcp_keepalive_time = 309 O3 U# ?, l$ O6 u% c8 B
net.ipv4.ip_local_port_range = 1024 65000
8 H& b7 ~0 q6 I
. `3 c0 U+ w5 s  q: a4 G! w. }
4 a5 M! W. b# f3 ^下面是一個簡單的 nginx 配置文件:nginx.conf2 {! y$ q. m! w% i
user www www;
* x  X. m: B5 ]" R9 ?worker_processes 8;
" [' F( A" l9 i0 _" y7 xworker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
  E2 v! g% V  T9 M! n+ A9 ]' Kerror_log /www/log/nginx_error.log crit;$ w7 l' w0 d! H8 B" u+ Y
pid /usr/local/nginx/nginx.pid;
0 A/ m7 l4 r3 W: Xworker_rlimit_nofile 204800;
7 f2 s( E7 |# M& i. O: t+ D: t8 U8 s$ y: Eevents5 F7 f6 ~4 M/ ^( H# R
{* o( M3 E, H) d
  use epoll;
5 u8 ?$ N, O9 ^  worker_connections 204800;6 x+ p& |; x- o+ Z1 n2 e" Y! I
}
7 d, ~+ B* Z$ `5 ]" s/ A2 ?http) v& A4 s7 d' T  z3 V. O: |' T
{
1 ?# X# G* l8 \% xinclude mime.types;
6 L! Q' @0 {/ ^" J' a" H default_type application/octet-stream;
" X' M# v/ C. m1 V charset utf-8;
5 A# X7 C" l. Y7 X# h6 E server_names_hash_bucket_size 128;
' `5 n6 K( ^. I' c" V: F client_header_buffer_size 2k;
0 S1 B5 U' q5 N1 V  o large_client_header_buffers 4 4k;8 s3 Z6 v  a# f+ L* o
client_max_body_size 8m;
& m" H# ?8 R0 {2 s sendfile on;
0 l' @* t+ Y+ y tcp_nopush on;
9 x+ Q: `) Q2 ~ keepalive_timeout 60;
. Q/ K8 k8 r, L/ d; x) {" u. B fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
& K1 T$ S' z2 {' ^5 B fastcgi_connect_timeout 300;
# L7 Z/ ]: H( b, d2 E& ^0 f/ U# v fastcgi_send_timeout 300;
# r% w; z2 d' C fastcgi_read_timeout 300;
; k1 S1 ]( }) V$ k/ Z fastcgi_buffer_size 16k;
/ t. x& W  c& r: I) t$ m$ f$ t fastcgi_buffers 16 16k;' l) ]2 g: L9 b' p
fastcgi_busy_buffers_size 16k;
1 y' c; F6 x+ \* z. _3 L fastcgi_temp_file_write_size 16k;
, P. Y" k; f# u8 r# i* a; ] fastcgi_cache TEST;% h$ R- W9 F! V1 ?) r% k
fastcgi_cache_valid 200 302 1h;
& ^* V1 a! J0 Q fastcgi_cache_valid 301 1d;
" ], v: V7 z; l+ K& k fastcgi_cache_valid any 1m;
3 ?: ^$ {- O: p/ w, ` fastcgi_cache_min_uses 1;4 u7 O, R! C3 W
fastcgi_cache_use_stale error timeout invalid_header http_500;6 c+ l+ M+ Z! l
open_file_cache max=204800 inactive=20s;
5 p5 t" @4 N% H$ }$ {2 \7 g& L open_file_cache_min_uses 1;
  C% @! y' J; g) w$ F% } open_file_cache_valid 30s;
6 w* K" Q5 G# Y0 G: ~( I8 K( ] tcp_nodelay on;$ A  w" r& O7 Z0 M
gzip on;
2 {) `" n* r' T: k& T: n gzip_min_length 1k;
2 B, Z% R8 H0 I' [9 D- z$ l gzip_buffers 4 16k;3 B1 Q# k, y9 z: I# F! ^/ H3 C' Z) E
gzip_http_version 1.0;
. q+ N& T7 Z1 y2 t gzip_comp_level 2;
7 t$ w  d" A, Z$ R gzip_types text/plain application/x-javascript text/css application/xml;
2 ^; G2 y8 B3 j, T gzip_vary on;/ d( l4 |" Q* |
server3 n3 R) @# o, n- B
{
0 D( n. h2 W& B listen 8080;/ l3 _6 M% D$ G
server_name backup.aiju.com;
' a/ u  {5 v+ f" Z" ]; [! J# D7 k index index.php index.htm;
$ `! N  i/ Q# }  o8 a9 p root /www/html/;
& N1 k6 u1 i+ Q& z$ j5 P location /status
- p6 k5 V" D/ x% U4 j# v# I- v+ R {1 B0 E/ O; p8 y4 S9 ]
stub_status on;9 x  B% `3 H0 T8 M
}
; T5 l$ x" Y7 }0 _( y8 c location ~ .*\.(php|php5)?$- e) S- G" c" L  E* [7 d
{# V+ }& y& p5 o$ c# d2 W
fastcgi_pass 127.0.0.1:9000;, V, D9 E3 y4 e. {
fastcgi_index index.php;/ g  _6 `0 ~! i# h0 k- z( _
include fcgi.conf;
' |4 X4 o. d% ?' X, u }
; j- U; ?" N3 i- h7 T& p location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$% Y  f' p4 f- O- S, D2 x" ~
{
/ ]/ h3 b7 T5 @& d# e' t4 ] expires 30d;1 N. x9 F0 L: p0 b
}
( o& p  P; b0 a6 v+ K+ ~" d8 u, y log_format access '$remote_addr - $remote_user [$time_local] "$request" '0 L8 i* R4 G1 p, C) }0 z
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';' z/ n0 h4 ?$ f/ _, e7 |
access_log /www/log/access.log access;; l; h9 n; [! e! e
}3 P* K/ u  L% ~# W$ |, }$ ]
}" U! G4 I! g( V' u
7 i2 J2 z% P( O) k
關於 FastCGI 的幾個指令:
# i7 O0 y* G  I5 \" gfastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
% |2 y3 K: i- \0 [. \這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。" ~% A! c& s# Y: {1 f8 I2 r" n1 E
fastcgi_connect_timeout 300;) V) s1 Q" t8 ~  M+ K! B
指定連接到後端 FastCGI 的超時時間。
  W* O/ k2 P! V( l: t2 b& Mfastcgi_send_timeout 300;# y1 p7 N- K8 @/ g) R" `" I
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
: y/ C5 T/ `# U& b. Y0 _fastcgi_read_timeout 300;% n0 P2 p! D% s( \
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
# b7 t% T5 g* P9 ]2 kfastcgi_buffer_size 16k;
6 Y8 i8 e6 k" o* n  _  z3 d指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的; m" o0 L2 ^4 F# e
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
8 U6 |$ N: c3 \1 K1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
: e/ B8 X2 y% N/ A4 Y2 M5 I小去緩存。. `# O+ I9 r5 t6 }' g
fastcgi_buffers 16 16k;
* U* R4 ~5 e6 j) E6 A7 B- E. l指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,6 p# y/ J* f$ J! q
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
' {# V$ P! D& {; V  q2 W當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
9 k, \3 L& D) b/ j$ m/ n' D& f站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
& t" O- k- m0 A2 N( y; Z5 y* ^置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4% D4 @4 S9 h+ }* k
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
: K: Q; O/ n- k4 G會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
8 ~- e. r: H. |  p4 z# Bfastcgi_busy_buffers_size 32k;3 q+ x/ J- c. i
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。) y& ?. F+ X* \  c
fastcgi_temp_file_write_size 32k;, k( R% Q1 t% e  e
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
* u7 u& W/ h# X  }1 W+ afastcgi_cache TEST
( w1 {9 \2 V3 V- I/ ^3 I9 A開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。# K8 \5 K$ C) r. m, t
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
  `$ N, a6 l* ]5 Afastcgi_cache_valid 200 302 1h;7 ~$ b  u- z* c$ t: A# r6 U! g$ d
fastcgi_cache_valid 301 1d;8 V1 V: [+ j# B1 f
fastcgi_cache_valid any 1m;  A8 ~& Y$ p9 C; G, i( U
為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。9 P, T6 I2 l9 Z$ r  B0 [& k0 N
fastcgi_cache_min_uses 1;
1 b' ]( B* ~5 Y" Q+ V緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被" ]& M4 N' C% f+ b$ u9 y
使用,那麼這個文件將被移除。
7 U. v  |5 Q5 f7 y4 afastcgi_cache_use_stale error timeout invalid_header http_500;" H5 H8 H: @! m( ~; Q5 R
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
% x# T, J& t4 y) p以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
7 n% O' T- Y, l6 d% S. `1 R) ]FastCGI,可以修改配置文件中的以下值:
3 @# ?! p4 N0 S1 `. E3 Y<value name="max_children">60</value>1 u8 U( D3 n0 `6 s3 M3 r5 C
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
" F' h2 X8 n4 m( |" H  M+ J% h" R<value name="rlimit_files">102400</value>
/ i0 N! }$ p4 u9 k最多打開文件數。
0 s' |: }- ?0 n' ?+ ~. l! @" j<value name="max_requests">204800</value>. d- r+ Q8 o8 R# t$ ]/ ]/ D/ `5 c
每個進程在重置之前能夠執行的最多請求數。) K" v2 r9 c9 D" ^4 ~* ?8 s5 _( }
5 J6 Z' n0 h9 i7 N: R
* i, }' o5 b3 j! d" W# [0 d4 C
參考資料:4 f. `+ o; p* x& Q( f. K
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf& T/ q% \, S9 h( y
http://blog.chinaunix.net/u3/105004/showart_2087155.html6 f" K  w' ?  N) ~$ ~
http://nginx.179401.cn/
) x7 K4 O5 l1 B( q; Qhttp://blog.s135.com/nginx_php_v5/
4 Y# n" [: j' Y/ {# N- T9 I* phttp://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html/ O. z+ t* |2 X% e, {7 U
https://www.netroby.com/view/31286 S# C9 Z$ M7 M% H
fastcgi 快取:4 S* o  ^" D; u/ R- ]
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/1 L2 ?. p: l+ I& f8 B" v
其他:
3 U1 g& K- S# P; J5 A9 p; n' w6 Lnginx設定檔內參數的詳細說明: http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
1 j9 e" n7 y% ?; _! Bnginx優化:http://www.jianshu.com/p/2184654ba4b2' r7 a( |5 w# v$ `- z
gzip壓縮功能以減少網路傳輸檔案大小:http://wenzhixin.net.cn/2013/11/10/server_gzip_on
' d! Z  T" C2 b: `* H/ z
6 Y9 e/ r' r+ r
* g0 `9 R8 h; v! b! j) G' @% r

# C0 B3 P6 M, m( _" d9 ~+ i- u- d7 d5 y/ n( [* t





歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/) Powered by Discuz! X3.2