主题
- #nginx設定
durumis AI 总结的文章
- 本文探討了nginx網頁伺服器效能最佳化,涵蓋gzip壓縮、proxy_buffer設定、worker和keep-alive設定等關鍵設定。
- 特別強調了gzip壓縮和proxy_buffer緩衝區在減少數據傳輸量和最小化伺服器負載方面的作用,以及worker進程和keep-alive設定在連線管理中的重要性。
- 本文建議在經過各種測試後,根據伺服器環境套用最佳設定,並提出了確保伺服器穩定運作的注意事項。
AI 翻译的文章。
durumis AI 总结的文章
Nginx是一個開源軟體,常用於網頁伺服器或網頁代理伺服器。
透過適當的設定,可以有效率地提供靜態內容。
在此記錄一些主要的設定。
載入網站時,會從網頁伺服器接收許多檔案,例如JavaScript、圖片、HTML和CSS等。
此時,如果使用gzip壓縮,而不是直接傳送原始內容,則可以顯著減少傳輸的數據量。
也就是說,應用此設定後:
- 減少數據量,節省頻寬。
- 節省伺服器資源。
- 使用者體驗方面,實際載入速度會加快。
另一方面,由於伺服器需要在回應內容之前執行gzip壓縮,因此CPU使用率可能會提高。
需要測試哪些類型的檔案需要壓縮、壓縮程度以及壓縮檔案的大小等,才能在生產環境中應用。
以下是一些與gzip相關的設定:
gzip on; # 設定gzip壓縮。 gzip_vary on; # 在標頭中添加Vary: Accept-Encoding。 gzip_proxied any; # 如果nginx用作代理伺服器,則壓縮來自後端的回應。(代理請求的壓縮) gzip_min_length 256; # 只壓縮大小超過256的檔案 gzip_comp_level 5; # 設定壓縮等級(1~9)。等級越高,CPU使用率越高。等級5大約壓縮50%。 gzip_types text/plain text/css text/xml application/json application/javascript; // 設定要壓縮的內容類型。
* gzip_vary指示伺服器可以根據客戶端是否支援gzip,分別傳送壓縮版和未壓縮版的內容。(通知客戶端,根據客戶端請求標頭(Accept-Encoding)可以提供不同版本的內容。)
Nginx會在將回應傳送給客戶端之前,將回應儲存在緩衝區中。
當網頁伺服器向客戶端傳送回應時,如果客戶端的網路速度很慢,伺服器則需要持續等待資料傳輸。(網路瓶頸)
這時,伺服器會持續使用資源,為了解決此問題,可以使用緩衝區暫時處理回應,與客戶端處理速度無關。這樣可以帶來以下優點:
- 優化伺服器負載
- 減少網路瓶頸
location / { proxy_pass 伺服器url;
# 代理緩衝區設定 proxy_buffering on; # 啟用緩衝區。 proxy_buffer_size 4k; # 設定緩衝區大小。(主要包含標頭)。 proxy_buffers 8 4k; # 每個連線的緩衝區個數和大小(8個4kb)。 proxy_busy_buffers_size 8k; # 向客戶端傳送回應時可以使用 的最大緩衝區大小 }
※如果緩衝區大小設定太大,可能會延遲文字串流等即時數據傳輸,因此需要測試。尤其近期AI相關服務盛行,如果文字串流失敗,務必檢查此設定。
worker是處理客戶端請求的程序,可以設定每個伺服器CPU核心有多少個worker。
http通常是請求-連線-回應-連線關閉,為了減少多次請求的連線資源,可以保持客戶端連線,這就是keep alive設定。
worker_processes auto; # 根據可用CPU核心數自動設定 worker_connections 1024; # 每個worker可以同時處理的連線數 # keep-alive設定 keepalive_timeout 65; keepalive_requests 100; server { listen 80; location / { proxy_pass 伺服器 url; } }
將這兩者結合的原因如下:
如果伺服器有4個核心,理論上可以同時處理的連線數為1024 * 4 = 4096。
(根據資源或流量環境,可能不準確)
當4096個客戶端同時連線並佔用所有keepalive 65秒時,
第4097個使用者嘗試連線時,將無法連線,可能會導致回應延遲。
因此,假設透過自動擴展等方式確保伺服器資源穩定,如果事件發生時回應延遲,則上述設定可能會間接造成影響。
proxy buffer等一些設定可以針對請求的URL個別應用。
* keep-alive等一些設定是在HTTP/伺服器層級應用,無法針對區塊個別設定。
server {
listen 80;
server_name example.com;
# 處理基本路徑(/) location / { proxy_pass 伺服器 url; # 緩衝區設定 proxy_buffering on; proxy_buffers 8 16k; proxy_buffer_size 32k; proxy_busy_buffers_size 64k; } # 處理/test路徑 location /test { proxy_pass 伺服器 url2; # 關閉緩衝區 proxy_buffering off; # 關閉緩衝區(直接傳送回應) } }
透過上述設定,可以優化網頁效能。請考慮各種測試案例,充分測試後再優化伺服器效能!
* 可以不用停機就能應用修改後的nginx設定,因此大多數情況下都相當穩定。