worker_processes
worker_processes指令是用來(lái)設(shè)計(jì)Nginx進(jìn)程數(shù),官方默認(rèn)設(shè)為1,賦值太多了,將會(huì)對(duì)系統(tǒng)IO影響效率,降低Nginx服務(wù)器性能。但是為了讓多核CPU能夠更好的處理并行任務(wù),我們可以講該值設(shè)置大一些,最好這個(gè)值是機(jī)器CPU的倍數(shù),并不是越大越好。
worker_cpu_affinity
worker_cpu_affinity指令用來(lái)分配每個(gè)進(jìn)程的CPU的工作內(nèi)核
worker_processes 4 ; 四核開(kāi)啟了四個(gè)進(jìn)程 worker_cpu_affinity 0001 0010 0100 1000; //我們CPU 就是四核 就是四組值,0是不使用,1是使用。 這樣每一個(gè)進(jìn)程都有一個(gè) cpu內(nèi)核了。 {解析 四組二進(jìn)制值分別對(duì)應(yīng)著四個(gè)進(jìn)程,第一個(gè)進(jìn)程對(duì)應(yīng)的是0001 第二個(gè)進(jìn)程對(duì)應(yīng)的是0010,表示第二個(gè)進(jìn)程計(jì)算器內(nèi)核,第三個(gè)進(jìn)程對(duì)應(yīng)的是0100,表示第三個(gè)計(jì)算機(jī)內(nèi)核,第四個(gè)進(jìn)程對(duì)應(yīng)1000}
send_timeout
send_timeout 120s;
用于設(shè)置nginx服務(wù)器響應(yīng)客戶端的超時(shí)時(shí)間,這個(gè)超時(shí)時(shí)間僅針對(duì)兩個(gè)客戶端和服務(wù)器之間建立連接后,某次活動(dòng)之間的時(shí)間。如果這個(gè)時(shí)間后客戶端沒(méi)有任何活動(dòng),nginx服務(wù)器將會(huì)關(guān)閉連接
keepalive_timeout
keepalive_timeout 160s
指定客戶端連接保持的超時(shí)時(shí)間,該設(shè)置表示nginx服務(wù)器與客戶端保持活動(dòng)時(shí)間是60s,60s后服務(wù)器與客戶端斷開(kāi)連接
client_header_buffer_size
client_header_buffer_size 4k;
設(shè)置nginx 服務(wù)器允許的客戶端請(qǐng)求頭部的緩沖區(qū)大小,默認(rèn)為1KB。此指令的賦值可以根據(jù)系統(tǒng)分頁(yè)大小來(lái)設(shè)置。分頁(yè)大小也可以用“# getconf PAGESIZE”命令取得
有過(guò)nginx服務(wù)器工作經(jīng)驗(yàn)的朋友可能會(huì)遇到nginx 服務(wù)器返回400錯(cuò)誤的情況,查找nginx服務(wù)器的400錯(cuò)誤原因比較困難,因?yàn)榇隋e(cuò)誤并不是每次都會(huì)出現(xiàn),出現(xiàn)錯(cuò)誤的時(shí)候,通常在瀏覽器和日志里也看不到任何有關(guān)提示信息。
根據(jù)實(shí)際經(jīng)驗(yàn)來(lái)看,有很大一部分情況是客戶端的請(qǐng)求頭部過(guò)大造成的。請(qǐng)求頭部過(guò)大,通常是客戶端cookie中寫入了較大的值引起的。于是適當(dāng)增大此指令的賦值,允許nginx服務(wù)器接收較大的請(qǐng)求頭部,可以改善服務(wù)器對(duì)客戶端
的支持能力。一般將此指令設(shè)置為4KB.
client_header_timeout
client_header_timeout 20s;
設(shè)置讀取客戶端請(qǐng)求頭數(shù)據(jù)的超時(shí)時(shí)間。此處值是15s,為經(jīng)驗(yàn)參考值,默認(rèn)是60s。
如果超過(guò)這個(gè)時(shí)間,客戶端還沒(méi)有發(fā)送完整的header數(shù)據(jù),服務(wù)端將返回”Request timeout(408)”錯(cuò)誤,
multi_accept
配置nginx服務(wù)器時(shí)候經(jīng)可能多的接受客戶端的網(wǎng)絡(luò)連接請(qǐng)求,默認(rèn)off
驅(qū)動(dòng)相關(guān)指定
use
參數(shù)詳解:use指令用于指定Nginx服務(wù)器使用的事件驅(qū)動(dòng)模型
worker_connections
該指令用于設(shè)置Nginx服務(wù)器的每個(gè)工作進(jìn)程允許同時(shí)連接客戶端的最大數(shù)量,語(yǔ)法為
worker_connections number;
結(jié)合worker_processes 指令,我們可以計(jì)算出Nginx 服務(wù)器允許同時(shí)練級(jí)的客戶端最大數(shù)量 Client=worker_processes * worker_connections / 2 。
在看一本書(shū)的過(guò)程中看到作者 在使用Nginx服務(wù)器的過(guò)程中遇到無(wú)法訪問(wèn)Nginx 服務(wù)器的情況。查看日志信息發(fā)現(xiàn)一直報(bào)如下錯(cuò)誤
他是怎么分析解決的呢:
根據(jù)報(bào)錯(cuò)信息,推測(cè)可能是Nginx 服務(wù)器的最大訪問(wèn)鏈接數(shù)量設(shè)置小了。此指令設(shè)置的就是Nginx服務(wù)器能接受的最大訪問(wèn)量,其中包括前端用戶鏈接也包括其他鏈接,這個(gè)值在理論上等于此指令的值與它允許開(kāi)啟的工作進(jìn)程最大數(shù)的乘積。 此指令一般為65535;
worker_connections 65535;
此指令的賦值與linux 操作系統(tǒng)中進(jìn)程可以打開(kāi) 的文件句柄數(shù)量有關(guān)系。按照以上設(shè)置修改了賦值以后,Nginx 服務(wù)器報(bào)如下錯(cuò)誤:
究其原因,在linux 系統(tǒng)中有一個(gè)系統(tǒng)指令open file resource limit ,它設(shè)置了進(jìn)程可以打開(kāi)的文件句柄數(shù)量,worker_connections 指令的賦值不能超過(guò) open file resource limit 的賦值可以使用以下的命令查看 linux 系統(tǒng)中 該指令的值
# cat /proc/sys/fs/file-max
可以通過(guò)下面命令將open file resource limit 指令的值設(shè)為 2390251:
# echo “2390251” > /proc/sys/fs/file-max; sysctl -p
這樣Nginx 的worker_connections 指令賦值65535 就沒(méi)問(wèn)題了
worker_rlimit_sigpending
參數(shù)詳解:該指令用于設(shè)置linux 2.6.6-mm2 版本之后的 linux 平臺(tái)的事件信號(hào)隊(duì)列長(zhǎng)度上線。其語(yǔ)法結(jié)構(gòu)為
worker_rlimit_sigpending limit;
注:limit 為linux 平臺(tái)事件信號(hào)隊(duì)列的長(zhǎng)度上限值。
該指令主要影響事件驅(qū)動(dòng)模型中rtsig 模型可以保存的最大信號(hào)數(shù)。Nginx 服務(wù)器的每一個(gè)工作進(jìn)程有自己的事件信號(hào)隊(duì)列用于存儲(chǔ)客戶端請(qǐng)求發(fā)生的信號(hào),如果超過(guò)長(zhǎng)度上限,nginx 服務(wù)器自動(dòng)轉(zhuǎn)用poll 模型處理未處理的客戶端請(qǐng)求,為了保證Nginx 服務(wù)器對(duì)客戶端請(qǐng)求的高效處理,請(qǐng)大家根據(jù)實(shí)際的客戶端并發(fā)請(qǐng)求數(shù)量和服務(wù)器運(yùn)行環(huán)境能力設(shè)定該值,設(shè)置示范
worker_rlimit_sifpending 1024;
devpoll_changes 和 devpoll_events
參數(shù)詳解:這兩個(gè)指令用于設(shè)置在 /dev/poll 事件驅(qū)動(dòng)模式下,Nginx服務(wù)器可以與內(nèi)核之間傳遞事件的數(shù)量,前者設(shè)置傳遞給內(nèi)核的事件數(shù)量,后者設(shè)置從內(nèi)核獲取的事件數(shù)量,語(yǔ)法結(jié)構(gòu)為:
devpoll_changes number;
devpoll_events number;
注:number 為要設(shè)置的數(shù)量,默認(rèn)值為32.
kqueue_changes 和 kqueue_events
參數(shù)詳解:這兩個(gè)指令用于設(shè)置在kqueue 時(shí)間驅(qū)動(dòng)模式下,Nginx 服務(wù)器可以與內(nèi)核之間傳遞事件的數(shù)量,前者設(shè)置傳遞給內(nèi)核的事件數(shù)量,后者設(shè)置從內(nèi)核獲取的事件數(shù)量,其語(yǔ)法結(jié)構(gòu)為:
kqueue_changes number;
kqueue_events number;
注:number 為要設(shè)置的數(shù)量,默認(rèn)值均為512。
epoll_events
參數(shù)詳解:該指令用于設(shè)置在epoll 事件驅(qū)動(dòng)模式下Nginx 服務(wù)器可以與內(nèi)核之間傳遞事件的數(shù)量,與其他事件驅(qū)動(dòng)模型不同,在epoll事件驅(qū)動(dòng)模式下Nginx 服務(wù)器向內(nèi)核傳遞事件的數(shù)量和從內(nèi)核傳遞事件數(shù)量是相等得。因此沒(méi)有類似epoll_changes 這樣的指令,默認(rèn)值為512.
epoll_events 512;
rtsig_signo
該指令用于設(shè)置rtsig模式使用兩個(gè)信號(hào)中的第一個(gè),
rtsig_signo signo
rtsig_overfloe_* number
用于代表三個(gè)具體的指令 分別是:rtsig_overflow_events rtsig_overflow_test
rtsig_over_thresold
rtsig_overflow_events:指定對(duì)壘米處時(shí)使用poll庫(kù)處理的事件數(shù)
rtsig_overflow_test: 指定poll庫(kù)處理地幾件事見(jiàn)后將清空rtsig模型使用的信號(hào)隊(duì)列,默認(rèn)32
rtsig_over_thresold: 指定rtsig模式使用的信號(hào)隊(duì)列中的時(shí)間超過(guò)多少時(shí)就清空隊(duì)列