我有两个网站,但我认为问题出在 SNI(我不确定)。
当我使用 SSL 启用第一个网站(与第二个网站相比,它是一个较旧的网站)时,它运行良好。
但问题是,如果我启用第二个网站的 SSL,只有第二个网站可以正常工作。而第一个网站会显示不安全网站错误(它从第二个网站加载证书,因此 one.com 实际上显示为 second.com)。
这是我的site.conf
文件(两个站点有类似的内容):
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
root /home/example;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
access_log /var/log/nginx/example_access_log;
error_log /var/log/nginx/example_error_log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
对此我应该做什么?
答案1
您的 server{} 块缺少server_name
设置。这就是 Nginx 选择使用哪个服务器块的方式——既用于来自 SNI 的 TLS 证书,也用于来自 HTTP 主机的实际网站。
server {
listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
...
}
server {
listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl;
server_name another.example.com;
ssl_certificate /etc/letsencrypt/live/another.example.com/fullchain.pem;
...
}