如何有效的優化Nginx配置,達到高性能

如何有效的優化Nginx配置,達到高性能

介紹

Nginx是Apache 2之外的一種快速、輕量級的選擇。然而,Nginx就像任何類型的服務器或軟件一樣,必須進行調優以幫助獲得最佳性能。

本文所需資源

  • 一個安裝基本配置的 Debian 7系統
  • 安裝和配置了Nginx服務器,並且能夠正常運行
  • 瞭解基礎的LInux操作知識

進程(Worker Processes) and 連接(Worker Connections)

我們需要調整的前兩個變量是Worker Processes和Worker Connections。在開始進入設置之前,我們需要了解這些指令所控制的內容。worker_processes指令是Nginx 的基礎。該指令負責使我們的虛擬服務器知道綁定到正確的IP和端口後會產生多少個workers。通常每個內核運行1個worker。超出此限制的任何內容都不會損害您的系統,但通常會留下閒置的進程。

要弄清楚將worker_processes設置為

多少,只需查看一下設置中的核心數量即可。如果最終將尺寸快速調整為更大的設置,則需要再次檢查內核並相應地調整此數字。我們可以通過輸入cpuinfo來完成此操作:

grep processor /proc/cpuinfo | wc -l

假設這返回值1。這就是我們計算機上的內核數量!

該worker_connections命令告訴我們的工作進程Nginx可以同時為多少人提供服務。默認值為768。但是,考慮到每個瀏覽器通常每個服務器至少打開2個連接,因此這個數目可以減少一半。這就是為什麼我們需要調整我們的員工關係以發揮其全部潛力。我們可以通過發出ulimit命令來檢查核心的限制:

ulimit -n

在較小配置的計算機(512MB)上,該數字可能顯示為1024,這是一個很好的起始數字。

讓我們更新配置:

sudo nano /etc/nginx/nginx.conf

worker_processes 1; worker_connections 1024;

請記住,可以服務的客戶端數量可以乘以核心數量。在這種情況下,我們可以每秒處理1024個客戶端。但是,該keepalive_timeout指令甚至可以進一步緩解這種情況。

緩衝區(Buffers)

我們可以做的另一個非常重要的調整是緩衝區的大小。如果緩衝區大小太小,則Nginx將必須寫入一個臨時文件,導致磁盤不斷讀寫。在做出任何決定之前,我們需要了解一些指令。

client_body_buffer_size:這處理客戶端緩衝區的大小,即發送到Nginx的所有POST操作。POST操作通常是表單提交。

client_header_buffer_size:與上一個指令類似,只不過它處理客戶端標頭的大小。出於所有目的和目的,1K通常對於該指令來說是不錯的大小。

client_max_body_size:客戶要求的最大允許大小。如果超過最大大小,則Nginx將吐出413錯誤或Request Entity Too Large。

large_client_header_buffers:大型客戶端標頭的緩衝區的最大數量和大小。

client_body_buffer_size 10K;

client_header_buffer_size 1k;

client_max_body_size 8m;

large_client_header_buffers 2 1k;

Timeouts

Timeouts還可以大大提高性能。

client_body_timeout和client_header_timeout指令是負責的服務器將等待客戶端體或客戶端頭請求之後被髮送的時間。如果沒有發送正文或標題,則服務器將發出408錯誤或“ 請求超時”。

該keepalive_timeout分配用於與客戶端保持連接超時。簡而言之,Nginx將在這段時間之後關閉與客戶端的連接。

最後,send_timeout建立不是建立在整個應答的傳輸上,而是建立在兩次讀操作之間;如果在這段時間之後客戶端什麼都不做,則Nginx正在關閉連接。

client_body_timeout 12;

client_header_timeout 12;

keepalive_timeout 15;

send_timeout 10;

Gzip壓縮(Gzip Compression)

Gzip可以幫助減少Nginx處理的網絡傳輸量。但是,請小心增加該值,gzip_comp_level因為服務器將開始浪費CPU週期。

gzip on;

gzip_comp_level 2;

gzip_min_length 1000;

gzip_proxied expired no-cache no-store private auth;

gzip_types text/plain application/x-javascript text/xml text/css application/xml;

靜態文件緩存(Static File Caching)

可以為未更改且定期提供的文件設置過期標題。可以將該指令添加到實際的Nginx服務器塊中。

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }

在上面的數組中添加和刪除任何文件類型,以匹配您的Nginx服務器的文件類型。

日誌(Logging)

Nginx將命中VPS的每個請求記錄到日誌文件中。如果使用分析來監視此功能,則可能需要關閉此功能。只需編輯access_log指令:

access_log off;

保存並關閉文件,然後運行:

sudo service nginx restart

結論

歸根結底,一臺配置正確的服務器就是要進行監視和相應調整的服務器。上面的變量沒有一成不變的,需要針對每種情況進行調整。您可能希望通過負載平衡和水平縮放的研究來提高機器性能。這些只是眾多優化手段中的幾個。

譯自:digitalocean

如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。


分享到:


相關文章: