Nginx

使用沒有萬用字元證書的 HTTPS 將所有子域重定向到主域(nginx)

  • December 7, 2015

我有一個帶有主站點和一些虛擬主機的域名。我希望所有站點(主站點和虛擬主機)只能通過 HTTPS(使用 HSTS)訪問,並且我希望將不存在的子域重定向到主站點。

總結一下我想要的:

我非常接近這一點,但倒數第二個重定向不起作用。我正在使用Let’s Encrypt的證書,該證書目前不提供萬用字元證書,因此該證書僅對主域和虛擬主機有效(我在創建證書時已明確列出)。由於證書無效,瀏覽器會阻止連接。

規避此問題的最佳方法(如果有)是什麼?

如果有幫助,這是我的(簡化的)nginx 配置:

server {
   listen 80;
   server_name _;
   return 301 https://example.com$request_uri;
}

server {
   listen 443 spdy;
   server_name _;
   # SSL settings snipped for brevity. SPDY and HSTS are enabled.
   return 301 https://example.com$request_uri;
}

server {
   listen 443 spdy;
   server_name example.com;
   root /var/www/example.com;
   index index.html index.htm;
}

server {
   listen 443 spdy;
   server_name vhost.example.com;
   root /var/www/vhost.example.com;
   index index.html index.htm;
}

實際上,如果沒有萬用字元證書,您將無法解決該問題。如果您不能提供與所請求的名稱匹配的證書,您將收到連接錯誤——這是協議的基本部分。

我想,理論上,你可以寫一些東西,當它收到一個不在證書中的名稱的 SNI 標頭時,從 Let’s Encrypt 快速頒發證書,並在 TLS 握手中發回新生成的證書,但是。 ..好吧,這不是一個實際的解決方案,是嗎?

引用自:https://serverfault.com/questions/741182