1)nginx進(jìn)程數(shù),建議按照cpu數(shù)目來(lái)指定,一般跟cpu核數(shù)相同或?yàn)樗谋稊?shù)。
worker_processes 8;
2)為每個(gè)進(jìn)程分配cpu,上例中將8個(gè)進(jìn)程分配到8個(gè)cpu,當(dāng)然可以寫(xiě)多個(gè),或者將一個(gè)進(jìn)程分配到多個(gè)cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
3)下面這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是系統(tǒng)的最多打開(kāi)文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
4)使用epoll的I/O模型,用這個(gè)模型來(lái)高效處理異步事件
use epoll;
5)每個(gè)進(jìn)程允許的最多連接數(shù),理論上每臺(tái)nginx服務(wù)器的最大連接數(shù)為worker_processes*worker_connections。
worker_connections 65535;
6)http連接超時(shí)時(shí)間,默認(rèn)是60s,功能是使客戶端到服務(wù)器端的連接在設(shè)定的時(shí)間內(nèi)持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),該功能避免了建立或者重新建立連接。切記這個(gè)參數(shù)也不能設(shè)置過(guò)大!否則會(huì)導(dǎo)致許多無(wú)效的http連接占據(jù)著nginx的連接數(shù),終nginx崩潰!
keepalive_timeout 60;
7)客戶端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求的頭部大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。分頁(yè)大小可以用命令getconf PAGESIZE取得。
client_header_buffer_size 4k;
8)下面這個(gè)參數(shù)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致,inactive是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存。
open_file_cache max=102400 inactive=20s;
9)下面這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息。
open_file_cache_valid 30s;
10)open_file_cache指令中的inactive參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的,如上例,如果有一個(gè)文件在inactive時(shí)間內(nèi)一次沒(méi)被使用,它將被移除。
open_file_cache_min_uses 1;
11)隱藏響應(yīng)頭中的有關(guān)操作系統(tǒng)和web server(Nginx)版本號(hào)的信息,這樣對(duì)于安全性是有好處的。
server_tokens off;
12)可以讓sendfile()發(fā)揮作用。sendfile()可以在磁盤(pán)和TCP socket之間互相拷貝數(shù)據(jù)(或任意兩個(gè)文件描述符)。Pre-sendfile是傳送數(shù)據(jù)之前在用戶空間申請(qǐng)數(shù)據(jù)緩沖區(qū)。之后用read()將數(shù)據(jù)從文件拷貝到這個(gè)緩沖區(qū),write()將緩沖區(qū)數(shù)據(jù)寫(xiě)入網(wǎng)絡(luò)。sendfile()是立即將數(shù)據(jù)從磁盤(pán)讀到OS緩存。因?yàn)檫@種拷貝是在內(nèi)核完成的,sendfile()要比組合read()和write()以及打開(kāi)關(guān)閉丟棄緩沖更加有效(更多有關(guān)于sendfile)。
sendfile on;
13)告訴nginx在一個(gè)數(shù)據(jù)包里發(fā)送所有頭文件,而不一個(gè)接一個(gè)的發(fā)送。就是說(shuō)數(shù)據(jù)包不會(huì)馬上傳送出去,等到數(shù)據(jù)包最大時(shí),一次性的傳輸出去,這樣有助于解決網(wǎng)絡(luò)堵塞。
tcp_nopush on;
14)告訴nginx不要緩存數(shù)據(jù),而是一段一段的發(fā)送–當(dāng)需要及時(shí)發(fā)送數(shù)據(jù)時(shí),就應(yīng)該給應(yīng)用設(shè)置這個(gè)屬性,這樣發(fā)送一小塊數(shù)據(jù)信息時(shí)就不能立即得到返回值。
tcp_nodelay on;
比如:
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
……
}
15)客戶端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求頭的大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。
client_header_buffer_size 4k;
客戶端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求頭的大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。
分頁(yè)大小可以用命令getconf PAGESIZE取得。
[root@test-huanqiu ~]# getconf PAGESIZE
4096
但也有client_header_buffer_size超過(guò)4k的情況,但是client_header_buffer_size該值必須設(shè)置為“系統(tǒng)分頁(yè)大小”的整倍數(shù)。
16)為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max 指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致,inactive 是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存。
open_file_cache max=65535 inactive=60s;
17)open_file_cache 指令中的inactive 參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的,如上例,如果有一個(gè)文件在inactive 時(shí)間內(nèi)一次沒(méi)被使用,它將被移除。
open_file_cache_min_uses 1;
18)指定多長(zhǎng)時(shí)間檢查一次緩存的有效信息。
open_file_cache_valid 80s;