Skip to content

建立 2026-09-15 更新 2026-09-15

效能調校

Nginx 預設值對大多數網站已經很夠用,但流量成長後,幾個常見的調校項目可以明顯降低延遲、減少頻寬用量。這一頁介紹最實用、風險最低的幾項設定。

worker 相關設定

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    keepalive_timeout 65s;
}
  • 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 會加上對應的 ExpiresCache-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 或頁面;若後端資料變動頻繁或包含個人化內容,啟用前要特別確認快取策略是否合適,避免使用者看到過期或錯誤的資料。