nginx配置引數優化

2022-09-21 04:03:06 字數 3427 閱讀 8091

ginx作為高效能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瀏覽器不啟用壓縮

測試:

curl -i -h "accept-encoding: gzip, deflate"
日誌

靜態檔案過期

對於靜態檔案,需要設定乙個過期時間,這樣可以讓這些資源快取到客戶端瀏覽器,

在快取未失效前,客戶端不再向服務期請求相同的資源,從而節省頻寬和資源消耗。

配置示例如下:

作為**伺服器

nginx絕大多數情況下都是作為**或者負載均衡的角色。

ssl優化

ssl_session_cache   shared:ssl:10m; //快取為10m

ssl_session_timeout 10m; //會話超時時間為10分鐘

nginx 配置引數優化

nginx作為高效能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,那麼可以立即傳...