我有两个域名example.com
和example.org
。两个域名都指向具有静态 IP 的同一台服务器。
第一个配置文件(用于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;
}
这是另一个配置文件
# /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
我的配置有什么问题?
答案1
使用前缀时,您没有server_name
用于域的安全版本的 s www.
,因此在每种情况下都使用默认服务器。
如果没有明确的默认服务器,则使用与适当端口匹配的第一个服务器块。
您需要将www.
变体添加到server_name
安全server
块中的指令,或使用通配符语法。
看这个文件了解详情。
例如:
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;
...
}
答案2
在我的例子中,我编辑了本地/etc/hosts
文件,将我正在测试的域名指向另一个服务器 IP 地址,该服务器目录中没有启用该网站/etc/nginx/sites-enabled
。Nginx 提供的是另一个网站,因此证书也不同。