我有两个域example.com和example.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的证书。
启用SNI支持: $ 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; ... }