Skip to content

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

安全強化

以下幾項設定成本很低,但能有效降低常見的攻擊面,建議作為對外服務網站的基本配置。

隱藏版本資訊

預設情況下,Nginx 會在回應標頭與錯誤頁面中透露自己的版本號,等於主動告訴攻擊者可以嘗試哪些已知漏洞:

http {
    server_tokens off;
}

關閉後,Server 標頭只會顯示 nginx,不會再附上版本號。

常見安全性標頭

透過 add_header 加上瀏覽器會遵守的安全性標頭,可以防止點擊劫持(clickjacking)、MIME 類型嗅探等常見攻擊:

server {
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
標頭 作用
X-Frame-Options 限制網頁能否被放進其他網站的 <iframe>,避免點擊劫持
X-Content-Type-Options 禁止瀏覽器自行猜測檔案類型,避免 MIME 混淆攻擊
Referrer-Policy 控制連到其他網站時,會帶多少來源網址資訊出去

若需要更嚴格的 Content-Security-Policy,建議先在測試環境確認不會誤擋網站自身的資源(圖片、字型、第三方腳本)再上線。

限制請求頻率

limit_req 可以限制單一客戶端在一段時間內的請求次數,用來防止暴力破解或惡意大量請求:

http {
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/s;

    server {
        location /login {
            limit_req zone=login_limit burst=10 nodelay;
        }
    }
}
  • rate=5r/s:平均每秒最多允許 5 個請求。
  • burst=10:允許短時間內的請求數超出限制,最多累積 10 個排隊處理,避免正常使用者被誤擋。

存取控制

針對管理後台或內部工具,可以直接用 IP 白名單限制存取來源:

location /admin/ {
    allow 10.0.0.0/24;
    deny all;
}

規則會由上到下依序比對,符合 allow 就放行,其餘一律用 deny all 擋下,是保護內部端點最簡單直接的做法。