52AV手機A片王|52AV.ONE
標題:
nginx優化(針對nginx.conf)
[打印本頁]
作者:
IT_man
時間:
2016-10-1 22:08
標題:
nginx優化(針對nginx.conf)
以CentOS 之 nginx的設定檔是在 /etc/nginx/nginx.conf
; ]# W' S' ^( X2 z9 D" o0 |, ]+ j
一般來說 nginx 配置文件中對優化比較有作用的為以下幾項:
: E |$ f* t9 J. s- ]2 j) u9 J8 W' y
worker_processes 8;
) M$ P) a9 S7 @" h6 {* G! z$ t* F+ p
nginx 進程數,建議按照 cpu 數目來指定,一般為它的倍數。
# P! B( l) s9 P' a- ^" y6 @" X
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
0 \# a, C, L' a9 ~; Y$ B6 ?
為每個進程分配 cpu,上例中將 8 個進程分配到 8 個 cpu,當然可以寫多個,或者將一個進程分配到多個 cpu。
8 \ X$ f; A/ ^9 T, u6 e
worker_rlimit_nofile 102400;
^3 R7 A C3 U8 O8 q4 u! t( v, a3 v; z
這個指令是指當一個 nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與 nginx 進程數
' [) [' [8 i8 ^+ f( ]6 N# o6 `
相除,但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n 的值保持一致。
/ ?8 B$ b/ y5 n! f: |1 M4 n
use epoll;
' {, e) j0 X2 x* y+ {/ u4 i1 D+ b
使用 epoll 的 I/O 模型,這個不用說了吧。
) C+ k4 g6 I6 q. d U9 e
worker_connections 102400;
d* N) a( W) E9 ?% a% Z) S3 ?& {
每個進程允許的最多連接數,理論上每台 nginx 服務器的最大連接數為 worker_processes*worker_connections。
' Y$ N: H5 W# X Y. ]' ^; d
keepalive_timeout 60;
: C3 o* \* q, Y% @5 j% c4 d5 [
keepalive 超時時間。
; ]: D4 U8 b/ {; h) ^" h
client_header_buffer_size 4k;
# Z- b/ z2 y l
客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過 1k,不過由
$ s% n0 D* S$ i; Q. X
於一般系統分頁都要大於 1k,所以這裡設置為分頁大小。分頁大小可以用命令 getconf PAGESIZE 取得。
, _8 b3 G) x2 I& g8 T
open_file_cache max=102400 inactive=20s;
8 X# u+ q G$ [5 M+ D: `
這個將為打開文件指定緩存,默認是沒有啟用的,max 指定緩存數量,建議和打開文件數一致,inactive 是指經過多長時
' S7 q# c) \- m3 a! ]
間文件沒被請求後刪除緩存。
& y% K% N4 i1 M( C
open_file_cache_valid 30s;
) V! [9 c2 d8 e) m
這個是指多長時間檢查一次緩存的有效信息。
3 ^8 l: r! t2 [7 X# b& U4 P
open_file_cache_min_uses 1;
: |+ n* c. Z% Q _
open_file_cache 指令中的 inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打
0 a9 O4 }; O+ Y8 k! Q6 O
開的,如上例,如果有一個文件在 inactive 時間內一次沒被使用,它將被移除。
+ I& W) n8 B: m* ~1 [
+ H8 K; \4 E. F( f/ r
- M1 G9 k* W# C
關於內核參數的優化:
& C: X* e) }/ O4 \ \
net.ipv4.tcp_max_tw_buckets = 6000
" r E7 }% D" ~
timewait 的數量,默認是 180000。
/ C; L: p- ~0 m6 _
net.ipv4.ip_local_port_range = 1024 65000
; v7 {; Q$ B* K9 @ R/ H3 b+ U
允許系統打開的端口範圍。
4 s/ W$ N% C | }8 k0 @
net.ipv4.tcp_tw_recycle = 1
- |2 t: e. u' A% f. U: F" T" T2 l! W
啟用 timewait 快速回收。
5 }/ s& n* [' _ `. ~- g
net.ipv4.tcp_tw_reuse = 1
8 ]9 y8 p w* F* L% j$ q1 Q' P
開啟重用。允許將 TIME-WAIT sockets 重新用於新的 TCP 連接。
2 t7 b/ u$ ?9 e# x) `% j
net.ipv4.tcp_syncookies = 1
$ i3 r Q1 {: B f# U* ]- M
開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理。
9 j5 y) \1 O5 {! \
net.core.somaxconn = 262144
8 N! m, L I, w0 j; z
web 應用中 listen 函數的 backlog 默認會給我們內核參數的 net.core.somaxconn 限製到 128,而 nginx 定義的
: J' }' H* Q: k" J8 ]9 @; a1 u
NGX_LISTEN_BACKLOG 默認為 511,所以有必要調整這個值。
+ j' l+ E$ D" p" ]1 B& ~" r/ F, t& Y
net.core.netdev_max_backlog = 262144
5 }! p9 t8 j- c& U% e
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
- \$ ?) g0 u/ C+ ~# g( ` b3 A
net.ipv4.tcp_max_orphans = 262144
; ~$ N- n' a. i& v& G1 @
系統中最多有多少個 TCP 套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並打
2 Z; c' d6 {) x* G, h0 E+ P
印出警告信息。這個限制僅僅是為了防止簡單的 DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值
. v% H% w( p- `& E
(如果增加了內存之後)。
; n$ L& E* `) f8 ]& Z7 b
net.ipv4.tcp_max_syn_backlog = 262144
/ ~* t; l( L9 a2 [7 ~8 i, o( G( t
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有 128M 內存的系統而言,缺省值是 1024,小內存的系
- b# }% O. J. P" J! e
統則是 128。
7 U6 A& T( ]$ O8 q0 f
net.ipv4.tcp_timestamps = 0
+ F9 `, V6 q3 [
時間戳可以避免序列號的捲繞。一個 1Gbps 的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的
0 m4 r, r4 t4 `- L6 o
數據包。這裡需要將其關掉。
2 b- G* q; C" M0 O
net.ipv4.tcp_synack_retries = 1
0 F; e4 [7 R, J7 M. \2 M: _ B
為了打開對端的連接,內核需要發送一個 SYN 並附帶一個回應前面一個 SYN 的 ACK。也就是所謂三次握手中的第二次
* m% f1 W2 L) d! T4 U; F' w
握手。這個設置決定了內核放棄連接之前發送 SYN+ACK 包的數量。
9 G9 z8 F& A2 ?+ v- p
net.ipv4.tcp_syn_retries = 1
- c, f: d- R% L |# h
在內核放棄建立連接之前發送 SYN 包的數量。
/ ]% C9 c' r* {! S+ e: c
net.ipv4.tcp_fin_timeout = 1
6 L$ r8 i5 v& Z! e, o! {
如果套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間。對端可以出錯並永遠不關閉連接,甚
+ n3 q4 G; z o/ x( S
至意外當機。缺省值是 60 秒。2.2 內核的通常值是 180 秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕
' t# z2 @) |0 u
載的 WEB 服務器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2 的危險性比 FIN-WAIT-1 要小,因為它最
' t; K+ t# j) I
多只能吃掉 1.5K 內存,但是它們的生存期長些。
; n, S0 |0 V" r1 a
net.ipv4.tcp_keepalive_time = 30
# C: c) @* h6 c3 i
當 keepalive 起用的時候,TCP 發送 keepalive 消息的頻度。缺省是 2 小時。
* a3 n0 m' h& g2 j) A' h7 a
$ L/ L* y$ V' T4 @4 l* J' n
* s/ ~ E* g! {+ D
下面貼一個完整的內核優化設置:
7 v! g5 J4 l9 d3 U! l7 H0 n
net.ipv4.ip_forward = 0
& q9 I8 D4 d* \6 m) S
net.ipv4.conf.default.rp_filter = 1
; u, v0 f0 p0 h' P
net.ipv4.conf.default.accept_source_route = 0
% J* D* e; \$ n4 D1 H
kernel.sysrq = 0
# I E% P ~2 P h5 ~
kernel.core_uses_pid = 1
4 P( U9 a" i6 h. l7 C! @
net.ipv4.tcp_syncookies = 1
. A* B. O y) d8 C% [; L
kernel.msgmnb = 65536
2 `* Y/ h8 F9 ^
kernel.msgmax = 65536
2 N& X! _$ t9 |# O( j. f9 S
kernel.shmmax = 68719476736
, h% {3 ~ k: Q4 Z& W
kernel.shmall = 4294967296
) X# R. ^9 W$ ]/ t% Z9 k
net.ipv4.tcp_max_tw_buckets = 6000
% l' d1 j7 x8 n' E" ^0 b- G
net.ipv4.tcp_sack = 1
( T& S$ \. n) h6 R8 M
net.ipv4.tcp_window_scaling = 1
9 f3 f: ?, v0 y. S" ~+ ~% N
net.ipv4.tcp_rmem = 4096 87380 4194304
# Z* z2 H+ Y1 i2 l: Q4 e' o1 G
net.ipv4.tcp_wmem = 4096 16384 4194304
$ i' n2 l: J- a
net.core.wmem_default = 8388608
3 @; ~, K) Y5 n3 t
net.core.rmem_default = 8388608
6 ?9 ~ Z3 G9 y) u \. ~
net.core.rmem_max = 16777216
! z2 r& l" ^$ M1 s. ?5 K
net.core.wmem_max = 16777216
9 `4 w# C6 I ^5 T* W
net.core.netdev_max_backlog = 262144
' q U. x4 s% v5 u' R4 z; q
net.core.somaxconn = 262144
; G3 ]% f5 t! l! s Y' B' a
net.ipv4.tcp_max_orphans = 3276800
$ R3 p' W& ]+ P9 j7 Q
net.ipv4.tcp_max_syn_backlog = 262144
+ B$ S8 d2 R! U5 P% ~# C0 }, ~
net.ipv4.tcp_timestamps = 0
" T4 d" p, Q# ~) M+ Z
net.ipv4.tcp_synack_retries = 1
8 y3 w0 g: {: R( j! Q H5 N
net.ipv4.tcp_syn_retries = 1
- A; q+ }8 _7 T6 {: S( }
net.ipv4.tcp_tw_recycle = 1
4 y) `& ?5 V% | [% ^) }
net.ipv4.tcp_tw_reuse = 1
" ?+ x! ^) b5 V# S
net.ipv4.tcp_mem = 94500000 915000000 927000000
9 }7 C$ d8 E# x% p5 B
net.ipv4.tcp_fin_timeout = 1
2 v6 ^! M; ^- T! W/ D z; D& O
net.ipv4.tcp_keepalive_time = 30
8 Z! v6 F; V# ~# e0 P- B
net.ipv4.ip_local_port_range = 1024 65000
4 L: _% T6 B: l5 f
: V1 b% R: y3 t0 l2 l( `* a+ h
% i. _ V: ~& e# W) Y
下面是一個簡單的 nginx 配置文件:nginx.conf
* |8 H" F F( E+ V$ k
user www www;
" B& W. p; h! E9 p5 s, o+ S
worker_processes 8;
! N) v( O. i4 O% B% [. d& f
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
& n: F) J! `7 w% X
error_log /www/log/nginx_error.log crit;
, F5 I# d$ T; u7 T$ I5 ?3 Y8 V& ?( F6 y3 M
pid /usr/local/nginx/nginx.pid;
7 r4 ^# z* P5 r% }0 N+ @$ h
worker_rlimit_nofile 204800;
- A4 X* f' t1 h0 r- R
events
) O- h# f- E1 A+ \3 \0 q- {
{
4 O5 c- y! E8 l. q0 s2 U
use epoll;
' t: d" q Z, G$ V" w9 Y1 I
worker_connections 204800;
" z; e$ M4 z P. k& G8 m" y9 h7 p7 E
}
' W5 h8 ]; y0 ]& Y$ v! V+ _
http
- Q V# h8 h( Q
{
6 m6 e+ y7 P$ E7 ]( U, i3 w1 U9 q0 Z) e8 U
include mime.types;
) L9 g! q+ n# y" `( u
default_type application/octet-stream;
: H! Q+ ^3 l9 N3 J+ `: ?. q
charset utf-8;
, q2 }( Q* d$ v+ v2 d! I
server_names_hash_bucket_size 128;
k+ r& a2 X: d
client_header_buffer_size 2k;
' A% P' v+ O& d3 u8 _0 n l2 C
large_client_header_buffers 4 4k;
8 B* F2 V3 u" s6 [' n
client_max_body_size 8m;
. x, k) X# H& I7 }& ?- Y3 z, ^
sendfile on;
0 @* S* g' x# t, x' q! ?5 W
tcp_nopush on;
4 x, W$ _; Y" A! Q1 ~5 X
keepalive_timeout 60;
8 K S3 X7 a& `% a1 |( g+ ~; \
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
4 C8 A; r- d. `% m
fastcgi_connect_timeout 300;
" Q0 k; X1 E5 `
fastcgi_send_timeout 300;
$ m. \# x, I* L3 m) x
fastcgi_read_timeout 300;
( v Y; l6 ]% [% O' u( _' L
fastcgi_buffer_size 16k;
# @" i! y1 A B" d2 t7 H
fastcgi_buffers 16 16k;
U) [- }! F0 M" C( M$ N
fastcgi_busy_buffers_size 16k;
" F; }9 J# x; l
fastcgi_temp_file_write_size 16k;
8 G! O3 g; l% d$ J% F
fastcgi_cache TEST;
$ F7 O# V& I/ d8 u6 ]- [' S+ r2 k
fastcgi_cache_valid 200 302 1h;
! C7 P! c) [+ p" N' v8 [$ Z* T7 ]' @, S
fastcgi_cache_valid 301 1d;
! |$ ^+ g4 {1 C' A
fastcgi_cache_valid any 1m;
( D) ^1 M/ V P/ {1 `
fastcgi_cache_min_uses 1;
; d6 Z M6 c) M( h/ T9 f+ A5 q' b
fastcgi_cache_use_stale error timeout invalid_header http_500;
6 ?2 d1 w! y" Y- y
open_file_cache max=204800 inactive=20s;
9 `, ]7 b3 Q0 I+ a0 s# U5 b
open_file_cache_min_uses 1;
* L: t1 w _& f1 o' c- k. J
open_file_cache_valid 30s;
& l* l) |% E4 m! i1 E
tcp_nodelay on;
" e8 I( Y' ^9 I7 O
gzip on;
* ^2 a. r# B" Z' _1 r6 d
gzip_min_length 1k;
* A% j, L2 |, @: h" ^" S
gzip_buffers 4 16k;
0 T) J1 V+ P4 ?0 J
gzip_http_version 1.0;
0 L' ~7 t7 [9 O, u* l1 e
gzip_comp_level 2;
0 t7 b* B0 o1 r$ P, n0 M
gzip_types text/plain application/x-javascript text/css application/xml;
7 M2 x* s+ ]: q$ |* H
gzip_vary on;
3 R+ O6 J+ h! i
server
7 f3 K) i* M1 I
{
+ R# |) Y ?) j1 r; y
listen 8080;
, K: l7 x/ z3 x! [' ~+ O% N
server_name backup.aiju.com;
6 ]1 E" F1 W0 l, @: x! V: g5 o& m
index index.php index.htm;
9 {! Z4 S! O9 I; w6 j% D
root /www/html/;
6 g+ _) r/ j. f( V; @( L6 k
location /status
$ D0 P; ~# l4 v1 K
{
# d! x* U6 S; \) f! v2 f% M! [) {
stub_status on;
, G/ ]& F* i( G$ G" z. O- i) g
}
* k( I& @* S6 n; @" S9 A9 N$ C3 W
location ~ .*\.(php|php5)?$
! n* \' C) K8 B
{
: A4 z0 w8 W5 {, ?, m
fastcgi_pass 127.0.0.1:9000;
3 V2 U; V1 z- \& a' J
fastcgi_index index.php;
* Q( T0 ^3 H# n$ D1 H/ G
include fcgi.conf;
( h$ w9 Y! }7 r3 `5 ?! X+ h
}
, R0 t: h* _! D% Y
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
: ?8 d) `2 @8 ^) \- t5 j& W" r
{
2 N$ p2 \% Q* {4 m0 N v
expires 30d;
b* |5 v* a0 s
}
$ _- V4 z% a6 z% p& ]8 U
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
9 Q" ~- l5 Q; [ W, i0 |
'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';
: v: X, E4 I" r6 \0 u1 b7 s9 {$ Y5 K
access_log /www/log/access.log access;
2 u) q n3 b5 }3 F4 F
}
e2 u7 I; z; i3 |2 R3 L
}
j B- {; b: Q. p; a
6 G! H4 F) o# @% y; q+ }) @
關於 FastCGI 的幾個指令:
. v* r/ v8 Y% X3 r- w" S
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
. a/ b/ t4 K# b0 L/ g4 D
這個指令為 FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。
0 \6 O |; U, L$ s7 U
fastcgi_connect_timeout 300;
5 e4 p$ n0 y$ x9 X
指定連接到後端 FastCGI 的超時時間。
" ] t4 Y& T$ Q- `) `
fastcgi_send_timeout 300;
+ C! k/ V- ?% p* X& U1 k ]6 H( ?0 E
向 FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向 FastCGI 傳送請求的超時時間。
7 K V! Z! D1 [: v9 X8 x- j. o7 ?
fastcgi_read_timeout 300;
. |1 X0 |( O8 o9 P7 V$ f: [0 R5 w& M
接收 FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收 FastCGI 應答的超時時間。
# n% C5 U, x2 A# e
fastcgi_buffer_size 16k;
3 t& Y& p$ z3 V, O
指定讀取 FastCGI 應答第一部分需要用多大的緩衝區,這裡可以設置為 fastcgi_buffers 指令指定的緩衝區大小,上面的
' j7 r6 m/ {' b0 T" U7 U
指令指定它將使用 1 個 16k 的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過
7 u4 K, Y- [7 \0 A! b
1k),但是你如果在 fastcgi_buffers 指令中指定了緩衝區的大小,那麼它也會分配一個 fastcgi_buffers 指定的緩衝區大
w- c& u* i0 Q' |+ K- A! S# f
小去緩存。
8 d% D4 H; u' a$ L( n0 w
fastcgi_buffers 16 16k;
( b4 Z. d+ C+ e+ g9 Q1 ~
指定本地需要用多少和多大的緩衝區來緩衝 FastCGI 的應答,如上所示,如果一個 php 腳本所產生的頁面大小為 256k,
8 }4 T* s2 Q* l# E$ _) J+ t5 L
則會為其分配 16 個 16k 的緩衝區來緩存,如果大於 256k ,增大於 256k 的部分會緩存到 fastcgi_temp 指定的路徑中,
Q3 h h4 x, w
當然這對服務器負載來說是不明智的方案,因為內存中處理數據速度要快於硬盤,通常這個值的設置應該選擇一個你的
" q; r7 O; N- C, E x% i$ T
站點中的 php 腳本所產生的頁面大小的中間值,比如你的站點大部分腳本所產生的頁面大小為 256k 就可以把這個值設
. j( h& G, h! v, J2 j6 x
置為 16 16k,或者 4 64k 或者 64 4k,但很顯然,後兩種並不是好的設置方法,因為如果產生的頁面只有 32k,如果用 4
. V6 D; O* s/ K0 [0 R7 i5 H# X5 b
64k 它會分配 1 個 64k 的緩衝區去緩存,而如果使用 64 4k 它會分配 8 個 4k 的緩衝區去緩存,而如果使用 16 16k 則它
3 a9 r/ K2 U/ z M
會分配 2 個 16k 去緩存頁面,這樣看起來似乎更加合理。
4 {. ~8 d- z: S: E
fastcgi_busy_buffers_size 32k;
* c" x! Z: \2 [ t2 {+ B( `
這個指令我也不知道是做什麼用,只知道默認值是 fastcgi_buffers 的兩倍。
2 [6 E0 P6 [. A( f! _
fastcgi_temp_file_write_size 32k;
; p( \( A+ B* _
在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍。
! u0 P7 W- R+ f
fastcgi_cache TEST
7 z7 N d- s! @$ z
開啟 FastCGI 緩存並且為其製定一個名稱。個人感覺開啟緩存非常有用,可以有效降低 CPU 負載,並且防止 502 錯誤。
4 F) S$ @& Z+ W: L
但是這個緩存會引起很多問題,因為它緩存的是動態頁面。具體使用還需根據自己的需求。
& q( c+ ]) p2 ?9 ?- W% F
fastcgi_cache_valid 200 302 1h;
% f+ q# S6 o( x$ }+ A) \
fastcgi_cache_valid 301 1d;
, D" }3 R9 G: q# J! e, W2 z1 L
fastcgi_cache_valid any 1m;
7 o4 V( n; r) _! Y
為指定的應答代碼指定緩存時間,如上例中將 200,302 應答緩存一小時,301 應答緩存 1 天,其他為 1 分鐘。
: V" ^+ t; N% f
fastcgi_cache_min_uses 1;
% R2 v5 H+ c) y
緩存在 fastcgi_cache_path 指令 inactive 參數值時間內的最少使用次數,如上例,如果在 5 分鐘內某文件 1 次也沒有被
& T4 I2 p S( |9 _ @7 x% @/ n6 q9 S
使用,那麼這個文件將被移除。
# _8 Q2 _" w; }( a' }/ w: L8 ^
fastcgi_cache_use_stale error timeout invalid_header http_500;
' {9 B3 J3 J1 g" Q& x
不知道這個參數的作用,猜想應該是讓 nginx 知道哪些類型的緩存是沒用的。
/ f/ w+ |' K! Q0 O G. t! `5 U
以上為 nginx 中 FastCGI 相關參數,另外,FastCGI 自身也有一些配置需要進行優化,如果你使用 php-fpm 來管理
9 A9 O3 ?7 {# A# B |+ a/ N
FastCGI,可以修改配置文件中的以下值:
# s2 _$ ?! ^7 n% j( _
<value name="max_children">60</value>
' ?6 ^: m: N# R- P$ I! |# N
同時處理的並發請求數,即它將開啟最多 60 個子線程來處理並發連接。
" a* u2 h) J, n: q- \$ h3 I1 C
<value name="rlimit_files">102400</value>
6 S/ V& D& Q( T% t# Z
最多打開文件數。
2 j0 Y0 k8 ^$ r2 Z+ G* i8 U
<value name="max_requests">204800</value>
1 _( t" [. U. i* ?9 b
每個進程在重置之前能夠執行的最多請求數。
+ ^5 W% P' ] J- w
4 I/ B2 ?$ m* o3 f2 ~
. D& F& N+ x" v; O+ Y6 y# s9 ?. T8 G8 b
參考資料:
# p- s% ~. u' @0 C3 b; F7 \# P% t
http://demo.ckan.org/dataset/daf ... /download/nginx.pdf
% B- J! n) W/ \
http://blog.chinaunix.net/u3/105004/showart_2087155.html
4 G9 x8 M) [" G7 z% g5 p
http://nginx.179401.cn/
# v% i e1 K7 o( R
http://blog.s135.com/nginx_php_v5/
+ q& T# M! W5 B9 N! P/ \0 J: F7 K/ a
http://xyz.cinc.biz/2015/09/linux-nginx-php-fpm-connection.html
7 |& N/ Y9 O+ f7 n2 f9 V4 h' I
https://www.netroby.com/view/3128
% A8 m _" ~; G. M! p' Q) o: v
fastcgi 快取:
; A. }2 _* Y! f4 |
https://www.cnxct.com/several-reminder-in-nginx-fastcgi_cache-and-php-session_cache_limiter/
, o7 O7 f( O" C+ X
其他:
# \& g) b8 @/ B) j k `9 B
nginx設定檔內參數的詳細說明:
http://nginx.org/en/docs/http/ng ... l#keepalive_timeout
, D: |* N: w" p; C8 B! s; W
nginx優化:
http://www.jianshu.com/p/2184654ba4b2
- t% \, n) W. C, a7 n
gzip壓縮功能以減少網路傳輸檔案大小:
http://wenzhixin.net.cn/2013/11/10/server_gzip_on
$ \0 b4 a6 g9 z
: ~! f* M- A: k: z5 |1 h
* v/ O% U4 {) |' U8 u
, |$ W9 J/ a' R; n1 O, G+ Z
n, d/ S6 ^& O0 R9 i) h
歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/)
Powered by Discuz! X3.2