當請求的站點未偵聽連接埠 80 時,nginx 會存取錯誤的站點

當請求的站點未偵聽連接埠 80 時,nginx 會存取錯誤的站點

我在一台伺服器上同時擁有生產 (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;
}

https://github.com/Fleshgrinder/nginx-configuration

正如您所看到的,我返回了 403 Access Forbidden 狀態代碼,因為這是最適合我的用例的狀態代碼(請參閱下面的評論)。如果您只想絕對不回傳任何內容,請使用特殊的 nginx 代碼 444。

相關內容