Nginx 不監聽子網域的 HTTPS 請求

Nginx 不監聽子網域的 HTTPS 請求

我有一個 Nginx 伺服器,它託管網站的主網域foo.com和子網域。bar.foo.com我只有主網域的證書,因此我只需要子網域的 HTTP 請求。我已經配置了兩個伺服器區塊,並且所有請求都運作良好:http://foo.com將被重新導向到https://foo.com,並且http://bar.foo.com僅停留在 HTTP 上。

但是,當我嘗試連線時出現了問題https://bar.foo.com,儘管我沒有配置子網域伺服器區塊來偵聽 443 或 ssl 請求,但該請求仍然被處理,並且在從瀏覽器收到憑證具有不同主機名稱的警告後與我請求的頁面相比,我獲得的頁面來自主網域foo.com

因此,顯然,原本server應該只偵聽我的主網域的 HTTPS 請求的區塊不知何故也在偵聽子網域的 HTTPS 請求,我不希望這種情況發生。

這是我的主域設定:

server {
  listen       80;
  server_name  foo.com www.foo.com;

  return 301 https://$server_name$request_uri;
}

server {
  listen       443 ssl;
  server_name  foo.com www.foo.com;

  ssl                  on;
  ssl_certificate      /etc/nginx/cert/foo.com.pem;
  ssl_certificate_key  /etc/nginx/cert/foo.com.key;
  ...

  location / {
    root   /var/www/foo.com/public_html;
    index  index.html index.htm;
  }
}

這是我的子網域配置:

server {
  listen       80;
  server_name  bar.foo.com www.bar.foo.com;

  location / {
    root   /var/www/bar.foo.com/public_html;
    index  index.html index.htm;
  }
}

這是 Nginx 設定檔的片段:

server {
  listen       80 default_server;
  listen       [::]:80 default_server;
  server_name  _;
  root         /usr/share/nginx/html;

  location / {
}

我嘗試在我的主網域的 443 伺服器區塊中刪除foo.comafter listen,但這沒有幫助。

我希望 Nginx 要么不監聽諸如此類的請求,https://bar.foo.com要么簡單地返回 404 或 444。

答案1

由於您只server為連接埠 443 配置了一個區塊,因此它是 nginx 使用的預設虛擬伺服器來為連接埠 443 的所有請求提供服務。

若要新增連接埠 443 (TLS) 的預設伺服器,您可以新增下列虛擬主機:

server {
    listen 443 default_server;
    server_name _;
    return 444;
}

答案2

我已經想出了解決辦法。就像 @Tero 和 @Cosmic 正確指出的那樣,我唯一的server主域 443 區塊被設定server為所有 443 請求的預設區塊。

server在Nginx設定檔中註釋了該區塊/etc/nginx/nginx.conf,並添加了以下兩個server區塊:

server {
  listen      80 default_server;
  server_name  _;
  return 444;
}

server {
  listen       443 ssl default_server;
  server_name  _;
  ssl_certificate      /etc/nginx/cert/foo.bar.pem;
  ssl_certificate_key  /etc/nginx/cert/foo.bar.key;
  return 444;
}

第一個將被設定為server任何 HTTP 請求的預設區塊,刪除任何不匹配的請求,同樣,第二個將刪除任何不匹配的 443 或 HTTPS 請求。

@Tero 提供的解決方案不起作用,因為 Nginx 需要任何 SSLserver區塊的證書,因此您需要為其提供證書。

相關內容