Nginx提供错误的证书。 两个域名redirect

我有两个域example.comexample.org 。 两个域指向同一个静态IP的服务器。

第一个configuration文件(例如example.com ):

 # /etc/nginx/sites-enabled/example.com.conf # Catchall for all non-existent domains server { return 404; } # Should redirect http://example.com to https://example.com server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } # Should redirect http://www.example.com to https://www.example.com server { listen 80; server_name www.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.com; # Using LetsEncrypt certs ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; root /var/www/example.com/; index index.html; } 

这是另一个configuration文件

 # /etc/nginx/sites-enabled/example.org.conf # Should redirect http://example.org to https://example.org server { listen 80; server_name example.org; return 301 https://$server_name$request_uri; } # Should redirect http://www.example.org to https://www.example.org server { listen 80; server_name www.example.org; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.org; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; root /var/www/example.org/; index index.html; } 

所以这是问题

 http://example.com -> https://example.com ✔ https://example.com ✔ http://www.example.com -> https://www.example.com ✔ https://www.example.com ✔ http://example.org -> https://example.org ✔ https://example.org ✔ http://www.example.org -> https://www.example.org ✗ https://www.example.org ✗ 

在最后两种情况下( www.example.org ),提供了example.com的证书。

启用S​​NI支持: $ nginx -V => TLS SNI support enabled

我的configuration有什么问题?

使用www.时,您的域的安全版本没有server_name www. 前缀,所以每种情况下都使用默认的服务器。

在没有明确的默认服务器的情况下,使用匹配适当端口的第一个服务器块。

你需要添加www. 安全server块中的server_name指令的变体,或者使用通配符语法。

详情请参阅此文件 。

例如:

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