降低家用 Web 服務被通報的機率
透過明文協議嘗試請求 HTTPS 服務時,Nginx 會回傳特殊的 497 狀態碼。若發生此錯誤,我們希望 Nginx 直接關閉連線,不回傳任何回應。這需要另一個非標準狀態碼 444。綜合兩種狀態碼,我們需要在 server 中加入如下設定:
error_page 497 @close;
location @close {
return 444;
}
使用 error_page 指令為 497 狀態碼設定虛擬路徑 @close,Nginx 在處理 @close 時發現要回傳 444,於是直接關閉連線。
此時你再用 curl 造訪對應埠口會看到如下錯誤:
curl http://example.zz.ac:5678 curl: (52) Empty reply from server
server {
listen 5678 ssl;
listen [::]:5678 ssl;
server_name example.zz.ac;
ssl_certificate ...;
ssl_certificate_key ..;
error_page 497 @close;
location @close {
return 444;
}
...
}
server {
listen 5678 ssl default_server;;
listen [::]:5678 ssl default_server;;
server_name _;
ssl_certificate ...;
ssl_certificate_key ..;
return 444;
}
