52AV手機A片王|52AV.ONE
標題:
nginx優化(針對nginx.conf)
[打印本頁]
作者:
IT_man
時間:
2016-10-1 22:08
標題:
nginx優化(針對nginx.conf)
以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
8 U6 q/ W, a4 n: d
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
' B1 W( ~. J Q) Q. r
worker_processes 8;
/ Z0 z1 o) p* J2 E8 @% U/ U' j
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
" `+ c2 i4 h" G. J/ B
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
H! K2 ^3 V: @5 F/ ?
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
- U6 K' d8 i" y! [
worker_rlimit_nofile 102400;
& X) ] }0 P) t) B: k' [
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數
, Q/ q: q* U8 N. @6 t7 s- G5 z
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
" ?7 w; p2 b$ ?- C7 v
use epoll;
1 x# ^, A$ n. t- L1 v- @4 B
使用 epoll 的 I/O 模型,這個不用說了吧。
7 |' u' r+ g3 \
worker_connections 102400;
6 `, s" z1 D" I
每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。
7 I* K% e9 p6 ^$ h" N- e2 j
keepalive_timeout 60;
+ N( M# W) S: J0 [* \9 }. k% u
keepalive 超時時間。
* L. n7 Q- F: V& Y3 O: F
client_header_buffer_size 4k;
7 y- r9 ]$ q7 Z
客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
8 F3 M: G$ @, m; v0 m& }# ~
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
# n; k% _" H2 m6 U: w8 k0 M# A& p5 h
open_file_cache max=102400 inactive=20s;
4 C7 O. P% U! T% a1 V) C8 I) h
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
4 J) L% y9 i) D, P+ K
間文件沒被請求後刪除緩存。
; I" R1 y, W/ \/ Q0 C( w+ I
open_file_cache_valid 30s;
! ?: o" I5 P$ M& a+ O/ ~
這個是指多長時間檢查一次緩存的有效信息。
j; S0 G; t; F% B+ m
open_file_cache_min_uses 1;
6 U2 G- l8 Q! o3 S$ h' |
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打
% n! [: [3 q; k# q* @9 q
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
9 e |0 ^$ a+ v% j$ ?
3 P2 K! }+ T# j# _+ |3 L; T/ A
U# F4 B: `5 b. E( F( T
關於內核參數的優化:
+ n# x3 |) ~# J8 i9 }; Y, Z: F; ?
net.ipv4.tcp_max_tw_buckets = 6000
; W0 `& U) k. Q* x# j0 F8 {: t. ^
timewait 的數量,默認是 180000。
, d M& \/ n" F* B
net.ipv4.ip_local_port_range = 1024 65000
3 B. U- @; a3 d
允許系統打開的端口範圍。
% h6 r6 c; v- E: l9 o* N! T
net.ipv4.tcp_tw_recycle = 1
" Y& k% Z! z) v
啟用 timewait 快速回收。
3 }1 z5 R' ] C5 I
net.ipv4.tcp_tw_reuse = 1
% u- O- k! u+ q. D0 ~
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
: L& x! o6 Z% R! A
net.ipv4.tcp_syncookies = 1
- Z8 \4 k1 L: M
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
4 T6 U! r( m" Z8 F3 n7 `
net.core.somaxconn = 262144
5 ?: p8 L0 z% {3 M& L- D5 v
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
2 [- Y' O; Y! o: v
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
( ]9 ?. C& b6 W% m
net.core.netdev_max_backlog = 262144
" H) @/ w+ l* x$ }" [' O
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
0 [( c. }+ A! A6 U; [! _! A
net.ipv4.tcp_max_orphans = 262144
; o$ q6 S. r6 `+ I% M1 B
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
! b/ Q, o2 {! S, Y; ^
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
* ^8 q" V/ N1 S
(如果增加了內存之後)。
- E5 @ ~4 r: |) G, s4 h( G
net.ipv4.tcp_max_syn_backlog = 262144
( r" v# N9 ?# `- O
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
. ^* G6 l6 X8 l6 z
統則是 128。
" f- ^9 M' @& n! ?9 I
net.ipv4.tcp_timestamps = 0
. l( N1 f1 c2 g% k
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
/ F q! M' O1 K8 n7 n1 K8 G; u
數據包。這裡需要將其關掉。
- z; Z. O8 k [
net.ipv4.tcp_synack_retries = 1
8 Q) F/ X2 l4 D0 W
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次
& z9 W3 [& F' g4 P, N
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
' c! [& v- J, w1 f& g$ J
net.ipv4.tcp_syn_retries = 1
# i4 {1 h2 q: c: I9 C
在內核放棄建立連接之前發送 SYN 包的數量。
9 p' u' D5 [5 e# Q+ K5 f+ P
net.ipv4.tcp_fin_timeout = 1
* _6 U5 H b) Z& y+ z
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
" K! m4 Z3 T2 M. Z
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕
; F; q7 ^7 v" X9 I4 J. _8 f" T! }
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
8 F" d- G$ {. E9 M8 ]! V9 P6 D2 |
多只能吃掉 1.5K 內存,但是它們的生存期長些。
3 S, i& S3 }2 [
net.ipv4.tcp_keepalive_time = 30
/ u R) d1 Z* j: R8 P/ Z9 p0 X
當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
# T4 [$ L" d6 f2 ^* N7 w& j
7 H* G- Z) k% a- V3 ?/ a
( V# G" [; I& ]6 h0 E! t
下面貼一個完整的內核優化設置:
! R/ a2 Y1 U6 W# {6 Y0 _
net.ipv4.ip_forward = 0
, y2 ] r3 p+ v3 y' e' l4 w- O% n
net.ipv4.conf.default.rp_filter = 1
9 B( |# X: h4 \. f7 G
net.ipv4.conf.default.accept_source_route = 0
! \4 F x) f0 t0 R- m+ O
kernel.sysrq = 0
X& L# L2 C4 z7 e' f$ f& S
kernel.core_uses_pid = 1
: @# n: G" c1 w# u7 B
net.ipv4.tcp_syncookies = 1
/ x- {8 e' w) n6 f7 u; S/ u+ j0 z. [# I
kernel.msgmnb = 65536
' r$ R" D6 k2 X: j. {
kernel.msgmax = 65536
3 D& W l- h. k! i: N0 F: W
kernel.shmmax = 68719476736
. H! Q/ G" p1 ^" {+ x/ Q5 Z
kernel.shmall = 4294967296
$ m- J* v; q w1 ~# N7 k
net.ipv4.tcp_max_tw_buckets = 6000
$ K; j2 b& H/ F2 y
net.ipv4.tcp_sack = 1
O. Z! \* w* G" m. \: M/ a4 |
net.ipv4.tcp_window_scaling = 1
( Z) t% F' ?: m( Q
net.ipv4.tcp_rmem = 4096 87380 4194304
% c6 P- u) Q/ q9 R7 r
net.ipv4.tcp_wmem = 4096 16384 4194304
3 w" h0 I5 [8 }
net.core.wmem_default = 8388608
* v5 w5 P5 ^( O
net.core.rmem_default = 8388608
. b, q0 d( b7 u1 @4 [' H! P, m
net.core.rmem_max = 16777216
- b K$ b0 b# ~4 _* T0 T% \
net.core.wmem_max = 16777216
2 Y$ _0 ]" z( H+ ]8 Z: y
net.core.netdev_max_backlog = 262144
: t* D8 K9 v* F1 {; Q( g4 f5 C
net.core.somaxconn = 262144
' T. b9 }. V9 t! T6 Q! t
net.ipv4.tcp_max_orphans = 3276800
8 q, B( A: r! k5 j' k) o' f
net.ipv4.tcp_max_syn_backlog = 262144
, N) E7 v+ R. {( w5 L
net.ipv4.tcp_timestamps = 0
, X% ?: L+ B! a( K0 d- l8 c
net.ipv4.tcp_synack_retries = 1
! M4 G) R9 M5 S/ M$ J+ K
net.ipv4.tcp_syn_retries = 1
3 ^% u6 g: h1 l, e6 \% [8 A
net.ipv4.tcp_tw_recycle = 1
8 M2 m$ \# T; K" B
net.ipv4.tcp_tw_reuse = 1
6 V ^: ?- k& O/ M7 D5 n. B: u* y3 j
net.ipv4.tcp_mem = 94500000 915000000 927000000
[, A1 e" n+ H4 p
net.ipv4.tcp_fin_timeout = 1
* y1 ^8 ]! x( u9 i7 C
net.ipv4.tcp_keepalive_time = 30
; {# z* d! {2 b2 {" j4 h
net.ipv4.ip_local_port_range = 1024 65000
% G5 ^& I* D% T$ s
4 }/ z" f7 ?: d' n# b* K
) W- ]. [- I6 ~
下面是一個簡單的 nginx 配置文件:nginx.conf
& p( a) \/ D# h' t
user www www;
# @! G% m2 Q! X
worker_processes 8;
7 b- j7 \9 ~" B( Y0 |4 U7 b" f
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
) e3 H- g- w" ^, m; ?, h% s7 T k
error_log /www/log/nginx_error.log crit;
& F9 [7 f# ~2 @+ Q0 |4 u, W
pid /usr/local/nginx/nginx.pid;
* V9 a7 R4 u# M5 V# y2 e/ @- H
worker_rlimit_nofile 204800;
+ M% }' r9 Z1 y* `# Z
events
% R E1 |5 X6 F0 B% j/ i7 n1 ?
{
5 @' ?& L% _) k# r- @- d. x
use epoll;
# W: a. p6 k1 X2 w
worker_connections 204800;
$ U- `0 Q2 k. J3 ]3 ]6 j
}
1 r* n* t: V+ ?+ l2 }
http
/ V" _9 I3 ~3 s& b6 x
{
: G* B8 o3 g2 @# A3 \0 H
include mime.types;
5 Z% b% w B% y2 I, F1 S7 D: y2 ^7 T
default_type application/octet-stream;
9 y& C* ^; s# r1 a
charset utf-8;
7 a6 t% E6 e: a2 B
server_names_hash_bucket_size 128;
& F2 W- i' u" [% g
client_header_buffer_size 2k;
l+ M. ^2 o! j* V+ ^
large_client_header_buffers 4 4k;
# I/ U+ |. x8 z. g; k* v3 R* ]- D# ]
client_max_body_size 8m;
/ e+ [! E# U; I" H* ?% v
sendfile on;
) ^7 P; V% v$ e6 Y. k
tcp_nopush on;
2 o0 s2 b t# A6 j4 _: \% ?. ] _
keepalive_timeout 60;
& W- s( P$ c% z8 Q- A, y, V
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
8 g' {2 u0 w; o ~! e2 G' \ K4 K/ d
fastcgi_connect_timeout 300;
4 w$ \9 ?) |: P( ?
fastcgi_send_timeout 300;
# u& v, N& ?; J" ~6 r1 [! H+ D2 y
fastcgi_read_timeout 300;
/ j5 f* ~; k. Z: O
fastcgi_buffer_size 16k;
5 c8 s! u( g; Z! D5 C0 q: `/ F* p5 \
fastcgi_buffers 16 16k;
; J8 I8 O9 O9 J9 ^
fastcgi_busy_buffers_size 16k;
5 C6 C- h! d ^) k$ |$ @
fastcgi_temp_file_write_size 16k;
: h# N$ A2 M5 N1 b
fastcgi_cache TEST;
' k3 U9 d2 ^# Y" f, a0 v
fastcgi_cache_valid 200 302 1h;
2 ]( g' ?2 G' c1 q/ n( r
fastcgi_cache_valid 301 1d;
% c; J! {8 G( B
fastcgi_cache_valid any 1m;
4 o5 Z3 G+ {) N' ^8 ?% u
fastcgi_cache_min_uses 1;
1 A& v; I0 P! i2 O8 c0 _# l7 v
fastcgi_cache_use_stale error timeout invalid_header http_500;
8 `" p. K! ]; F& F3 l- d6 O
open_file_cache max=204800 inactive=20s;
7 q2 K: I$ |2 f/ O9 a
open_file_cache_min_uses 1;
* {% m4 R" b. O* t' }% w% j0 G
open_file_cache_valid 30s;
7 H& O: a. h: G0 A
tcp_nodelay on;
( @' Q8 l+ ?2 i6 Y
gzip on;
$ a& n) s1 D2 A; L% K/ @' ?0 P6 J
gzip_min_length 1k;
4 g( B. g2 w/ Q8 F$ T9 t, J$ ^
gzip_buffers 4 16k;
/ _2 Q; U2 A$ T7 N1 Y
gzip_http_version 1.0;
+ n7 i+ x7 B7 L* X! `7 W; B
gzip_comp_level 2;
% R6 }7 Q+ U4 }
gzip_types text/plain application/x-javascript text/css application/xml;
* l; F$ w2 A0 C" v! u0 U* J8 Z
gzip_vary on;
1 _( L8 G& U" T8 Q- m" G) c8 q0 q
server
0 q) V! G* ^9 p& e/ D0 q2 P$ w
{
: d/ o# g: y% U
listen 8080;
# \5 Y4 n" i! S# V
server_name backup.aiju.com;
) C# ~- G9 y: p& T) w! u8 Q! C
index index.php index.htm;
! f; a, J& K, E1 @$ D3 M
root /www/html/;
, U9 d! G( W1 q3 O, h
location /status
% A$ O8 i- [$ H" z7 M5 |
{
9 S- A/ c8 [6 z% F$ A; l6 w
stub_status on;
7 x2 r" U7 y+ O/ _6 e6 }& X
}
1 S5 }- u: @1 ~6 K7 ]# O: \
location ~ .*\.(php|php5)?$
: [' p% x; ~/ g: x9 U
{
+ U& e1 l+ ?( \: e/ f1 \" ]" _- C
fastcgi_pass 127.0.0.1:9000;
5 ^1 s# o8 P4 Y" E1 s$ G5 ~
fastcgi_index index.php;
2 X; Q! R5 z+ a' U% e6 R" b* N
include fcgi.conf;
! \; o" `2 ~& S( y
}
: Q- R; `: h+ N6 Q% h
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
d& b( D7 l8 O3 {% L
{
+ g9 I m, T. z; E8 e0 O8 U
expires 30d;
$ J2 p+ z1 V7 S3 y, Z
}
7 j, P5 |# [, Z4 t; b+ d# L
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
- h% O+ @5 @- d
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
+ ^9 f) n. E9 S/ p. |
access_log /www/log/access.log access;
1 H, S* ~0 u2 j! `& @
}
( ^( `9 Y+ K' S/ ?
}
$ B- p$ o1 a' T5 k- C
' _/ R) C% B1 r4 o+ {* e4 l
關於 FastCGI 的幾個指令:
: J* x6 w; J4 R, m# E! X, w
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
. z& W9 _' r3 x! g' m9 I: G0 c
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
( V1 j8 k# v7 g0 f# O/ Z
fastcgi_connect_timeout 300;
9 q% f$ r$ Y; d0 h- K( D
指定連接到後端 FastCGI 的超時時間。
# _+ M; d* X2 J8 f8 K8 v: p# y
fastcgi_send_timeout 300;
, P" Z: k1 i4 x1 h8 R
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
1 ?$ Z9 E& c# P( Z. }& [
fastcgi_read_timeout 300;
( |% d/ ?3 G* T+ m4 b" a5 [
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
, K1 |' i+ p) |4 ]8 X) B1 @; {
fastcgi_buffer_size 16k;
! ?+ v0 H) b" o1 ]
指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
/ N; G! y# b Y/ }; ]
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
, v5 o1 a& ~- z" Y& Y# D
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
' o, ~' [9 {/ o$ d/ i
小去緩存。
4 j; p- K- d+ E3 x; m s# K- B
fastcgi_buffers 16 16k;
* ~& b a! |* S) H: y# |1 i8 p
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
, P {* r. Z9 d7 q2 E
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
9 F# X# i: t7 t
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
' z- u! M% S: _+ Q' w7 _& A# H
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
( G! F: A. D- m# S+ e
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
. x4 ?5 S4 `) Q
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
3 p. e, D2 e/ X% F; ?5 N
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
" `2 V2 f* _' I; R7 o4 g m* ?* h: F
fastcgi_busy_buffers_size 32k;
- Z8 U; R1 [, n3 R
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
; U, ~: v; [$ t" s1 P
fastcgi_temp_file_write_size 32k;
. l# ?9 u; Z* n: [* T
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
( l! V2 K2 ], N) _
fastcgi_cache TEST
6 F$ s! N. s2 F$ u
開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
$ y3 b5 Y2 v6 T& s
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
8 K( b- _/ \2 \# I% G# T" I' [
fastcgi_cache_valid 200 302 1h;
2 A, H& e3 z2 Z* z7 a
fastcgi_cache_valid 301 1d;
1 C# t% Y! o( G
fastcgi_cache_valid any 1m;
" O5 O* _9 M: ^6 T [
為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。
; `6 `3 H* {1 f. d
fastcgi_cache_min_uses 1;
: D# a, L& t; m6 u, W( }
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被
0 `9 g4 |1 N0 k, a5 L6 x. F) K
使用,那麼這個文件將被移除。
- C2 N0 m1 z& t* y
fastcgi_cache_use_stale error timeout invalid_header http_500;
! ]* k. c0 l' W7 f- k3 ]6 Q
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
& C& |: E" O" t8 _) `6 I) @
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
; Q/ |& H% N8 \8 `3 a- F7 X
FastCGI,可以修改配置文件中的以下值:
! K6 Z0 a7 Q6 n, }" w
<value name="max_children">60</value>
$ i3 Q/ H4 v& K( \
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
3 Z2 m( f$ Q% S5 D
<value name="rlimit_files">102400</value>
1 ]- X8 M d y8 X1 B
最多打開文件數。
6 y" v- `; r8 Y( Q, M* a& {
<value name="max_requests">204800</value>
8 l7 Z) Y& w, Z
每個進程在重置之前能夠執行的最多請求數。
0 ]/ K* k9 S7 d8 w1 s. u
8 ~! o% ^) l& u! T! E$ A
4 x6 [/ r% u% o% @6 F& j, L
參考資料:
3 o5 f1 c; |, Q
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
% G s; W* j, _0 W; Q8 ]& F
http://blog.chinaunix.net/u3/105004/showart_2087155.html
/ r r: X' A8 `- j" m# X
http://nginx.179401.cn/
# C3 `; @0 o" b8 y8 E
http://blog.s135.com/nginx_php_v5/
, R+ y7 U5 m, i3 w/ }8 v
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
0 Z5 B G/ p. g! O4 U4 X
https://www.netroby.com/view/3128
( A( V' }! L- t8 z* L
fastcgi 快取:
% z" Q2 ~8 P* D& A6 i
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
* q! u5 {5 I+ D( E" K
其他:
4 _7 ? S; w1 c
nginx設定檔內參數的詳細說明:
http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
' u w! E7 W. l9 J$ W
nginx優化:
http://www.jianshu.com/p/2184654ba4b2
7 ^( k1 `7 i1 A' B
gzip壓縮功能以減少網路傳輸檔案大小:
http://wenzhixin.net.cn/2013/11/10/server_gzip_on
v6 U. ` F1 ~
1 P( k1 B( h/ T" m. Y+ |
/ @# V# p. u# Z0 s n1 U# P- c9 q. R$ Z
* T1 z: U: {) |1 b. ~
* u# ]# ]% t- U# y. r
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.itech.casa/)
Powered by Discuz! X3.2