如何在 nginx 上使用 SSL 证书设置多个网站

如何在 nginx 上使用 SSL 证书设置多个网站

我有两个网站,但我认为问题出在 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;
    ...
}

相关内容