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