nginx作為高效能web伺服器,即使不特意調整配置引數也可以處理大量的併發請求。
以下的配置引數是借鑑網上的一些調優引數,僅作為參考,不見得適於你的線上業務。
worker程序
該引數表示啟動幾個工作程序,建議和本機cpu核數保持一致,每一核cpu處理乙個程序。
它表示nginx最大可用的檔案描述符個數,需要配合系統的最大描述符,建議設定為102400。
還需要在系統裡執行ulimit -n 102400才可以。
也可以直接修改配置檔案/etc/security/limits.conf修改
增加:* soft nofile 655350
* hard nofile 655350
該引數用來配置每個nginx worker程序最大處理的連線數,這個引數也決定了該nginx伺服器最多能處理多少客戶端請求
(worker_processes * worker_connections),建議把該引數設定為10240,不建議太大。
http和tcp連線
使用epoll模式的事件驅動模型,該模型為linux系統下最優方式。
使每個worker程序可以同時處理多個客戶端請求。
使用核心的fd檔案傳輸功能,可以減少user mode和kernel mode的切換,從而提公升伺服器效能。
當tcp_nopush設定為on時,會呼叫tcp_cork方法進行資料傳輸。
使用該方法會產生這樣的效果:當應用程式產生資料時,核心不會立馬封裝包,而是當資料量積累到一定量時才會封裝,然後傳輸。
不快取data-sends(關閉 nagle 演算法),這個能夠提高高頻傳送小資料報文的實時性。
(關於nagle演算法)
【假如需要頻繁的傳送一些小包資料,比如說1個位元組,以ipv4為例的話,則每個包都要附帶40位元組的頭,
也就是說,總計41個位元組的資料裡,其中只有1個位元組是我們需要的資料。
為了解決這個問題,出現了nagle演算法。
它規定:如果包的大小滿足mss,那麼可以立即傳送,否則資料會被放到緩衝區,等到已經傳送的包被確認了之後才能繼續傳送。
通過這樣的規定,可以降低網路裡小包的數量,從而提公升網路效能。】
定義長連線的超時時間,建議30s,太短或者太長都不一定合適,當然,最好是根據業務自身的情況來動態地調整該引數。
定義當客戶端和服務端處於長連線的情況下,每個客戶端最多可以請求多少次,可以設定很大,比如50000.
設定為on的話,當客戶端不再向服務端傳送請求時,允許服務端關閉該連線。
客戶端如果在該指定時間內沒有載入完body資料,則斷開連線,單位是秒,預設60,可以設定為10。
這個超時時間是傳送響應的超時時間,即nginx伺服器向客戶端傳送了資料報,但客戶端一直沒有去接收這個資料報。
如果某個連線超過send_timeout定義的超時時間,那麼nginx將會關閉這個連線。單位是秒,可以設定為3。
buffer和cache(以下配置都是針對單個請求)
當客戶端以post方法提交一些資料到服務端時,會先寫入到client_body_buffer中,如果buffer寫滿會寫到臨時檔案裡,建議調整為128k。
瀏覽器在傳送含有較大http body的請求時,其頭部會有乙個content-length欄位,client_max_body_size是用來限制content-length所示值的大小的。
這個限制body的配置不用等nginx接收完所有的http包體,就可以告訴使用者請求過大不被接受。會返回413狀態碼。
例如,使用者試圖上傳乙個1gb的檔案,nginx在收完包頭後,發現content-length超過client_max_body_size定義的值,
就直接傳送413(request entity too large)響應給客戶端。
將該數值設定為0,則禁用限制,建議設定為10m。
設定客戶端header的buffer大小,建議4k。
對於比較大的header(超過client_header_buffer_size)將會使用該部分buffer,兩個數值,第乙個是個數,第二個是每個buffer的大小。
建議設定為4 8k
該引數會對以下資訊進行快取:
開啟檔案描述符的檔案大小和修改時間資訊;
存在的目錄資訊;
搜尋檔案的錯誤資訊(檔案不存在無許可權讀取等資訊)。
格式:open_file_cache max=size inactive=time;
max設定快取檔案的數量,inactive設定經過多長時間檔案沒被請求後刪除快取。
建議設定 open_file_cache max=102400 inactive=20s;
指多長時間檢查一次快取的有效資訊。建議設定為30s。
open_file_cache指令中的inactive引數時間內檔案的最少使用次數,
如,將該引數設定為1,則表示,如果檔案在inactive時間內一次都沒被使用,它將被移除。
建議設定為2。
壓縮
對於純文字的內容,nginx是可以使用gzip壓縮的。使用壓縮技術可以減少對頻寬的消耗。
由ngx_http_gzip_module模組支援
配置如下:
gzip on; //開啟gzip功能
gzip_min_length 1024; //
設定請求資源超過該數值才進行壓縮,單位位元組
gzip_buffers 16 8k; //
設定壓縮使用的buffer大小,第乙個數字為數量,第二個為每個buffer的大小
gzip_comp_level 6; //
設定壓縮級別,範圍1-9,9壓縮級別最高,也最耗費cpu資源
指定哪些型別的檔案需要壓縮
gzip_disable "
msie 6\.
"; //
ie6瀏覽器不啟用壓縮
測試:
日誌
靜態檔案過期
對於靜態檔案,需要設定乙個過期時間,這樣可以讓這些資源快取到客戶端瀏覽器,
在快取未失效前,客戶端不再向服務期請求相同的資源,從而節省頻寬和資源消耗。
配置示例如下:
作為**伺服器
nginx絕大多數情況下都是作為**或者負載均衡的角色。ssl優化
ssl_session_cache shared:ssl:10m; //快取為10m
ssl_session_timeout 10m; //
會話超時時間為10分鐘
nginx配置引數優化
ginx作為高效能web伺服器,即使不特意調整配置引數也可以處理大量的併發請求。以下的配置引數是借鑑網上的一些調優引數,僅作為參考,不見得適於你的線上業務。worker程序 該引數表示啟動幾個工作程序,建議和本機cpu核數保持一致,每一核cpu處理乙個程序。它表示nginx最大可用的檔案描述符個數,...
nginx 配置優化的幾個引數
2011 04 22 最近在伺服器上搞了一些nginx 研究了一下 總結總結 worker processes 8 nginx要開啟的程序數一般等於cpu的總核數 其實一般情況下開4個或8個就可 我開2個 以了 多了沒有太多用 每個nginx程序消耗的記憶體10兆的模樣 worker cpu aff...
Nginx配置引數優化, Nginx運維規範
worker程序 http和tcp連線假如需要頻繁的傳送一些小包資料,比如說1個位元組,以ipv4為例的話,則每個包都要附帶40位元組的頭,也就是說,總計41個位元組的資料裡,其中只有1個位元組是我們需要的資料。為了解決這個問題,出現了nagle演算法。它規定 如果包的大小滿足mss,那麼可以立即傳...