效能調校
Nginx 預設值對大多數網站已經很夠用,但流量成長後,幾個常見的調校項目可以明顯降低延遲、減少頻寬用量。這一頁介紹最實用、風險最低的幾項設定。
worker 相關設定
worker_processes auto:依 CPU 核心數自動決定 worker 數量,通常一個核心對應一個 worker 效果最好。worker_connections:每個 worker 可同時處理的連線數上限,理論最大並發數約為worker_processes × worker_connections。keepalive_timeout:允許客戶端重複使用同一條連線發送多次請求,減少重複建立連線的開銷。
靜態資源快取
讓瀏覽器快取不常變動的靜態檔案(圖片、CSS、JS),可以大幅減少重複請求:
location ~* \.(jpg|jpeg|png|gif|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
expires 30d 會加上對應的 Expires 與 Cache-Control 標頭,告訴瀏覽器 30 天內不必重新下載這些檔案。
開啟 gzip 壓縮
傳輸前先壓縮文字類型的內容,可以有效縮小檔案大小、加快載入速度:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1024;
}
gzip_min_length 避免對太小的檔案壓縮(壓縮本身也有開銷,檔案太小反而不划算);圖片、影片等已經是壓縮格式的檔案則不需要再套用 gzip。
反向代理快取(簡介)
如果 Nginx 是反向代理,且後端回應內容不常變動,可以考慮開啟 proxy_cache,把後端回應暫存起來,重複請求就不必再打到後端:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;
location / {
proxy_pass http://backend_app;
proxy_cache my_cache;
proxy_cache_valid 200 10m;
}
這項設定適合內容更新頻率較低的 API 或頁面;若後端資料變動頻繁或包含個人化內容,啟用前要特別確認快取策略是否合適,避免使用者看到過期或錯誤的資料。