安全強化
以下幾項設定成本很低,但能有效降低常見的攻擊面,建議作為對外服務網站的基本配置。
隱藏版本資訊
預設情況下,Nginx 會在回應標頭與錯誤頁面中透露自己的版本號,等於主動告訴攻擊者可以嘗試哪些已知漏洞:
關閉後,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 白名單限制存取來源:
規則會由上到下依序比對,符合 allow 就放行,其餘一律用 deny all 擋下,是保護內部端點最簡單直接的做法。