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