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