我在一台伺服器上同時擁有生產 (www.myexample.com) 和開發 (dev.myexample.com),使用伺服器區塊和單獨的目錄,並且都監聽連接埠 80。
現在我已經安裝了 SSL 憑證並在網站設定檔中啟用了 SSL 模式。同時我將監聽埠從80更改為443,因此該網站不應在連接埠80上回應,而僅在連接埠443上回應。
現在看來,當我連接到時,我得到了開發站點,而不是錯誤http://www.myexample.com。
為了解決這個問題,我添加了一個真正的「預設」伺服器區塊(server_name 設定為 _)並指向一個不包含檔案的目錄。
有沒有更好的辦法?如果我想要一個真正的預設網站,我不希望它顯示為已知的主機名稱。我猜我必須創建一個伺服器區塊來偵聽 www.myexaple.com:80 並將其配置為以某種方式拒絕所有頁面請求,但是如何呢?
如何才能完全停止回應對我不託管的網站的任何請求?
答案1
使用無效主機名稱配置預設伺服器始終是一個好主意,這可以確保拒絕未設定任何主機頭字段(或未配置主機)的用戶端。
server {
listen [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k;
server_name _;
return 403;
}
server {
listen [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl;
server_name _;
ssl_certificate certificates/_/pem;
ssl_certificate_key certificates/_/key;
return 403;
}
正如您所看到的,我返回了 403 Access Forbidden 狀態代碼,因為這是最適合我的用例的狀態代碼(請參閱下面的評論)。如果您只想絕對不回傳任何內容,請使用特殊的 nginx 代碼 444。