一个 IP 上有两个域名,添加了一个子域名,不同域名的 SSL 出现协议错误

一个 IP 上有两个域名,添加了一个子域名,不同域名的 SSL 出现协议错误

多年来,我一直使用 SSL 在一个 IP 上运行两个域名。一个是 example.com,另一个是 other.com。example.com 有三个带有 SSL 证书的名称:example.com、www.example.com 和 dev.example.com。other.com 有 other.com 和 www.other.com。

首次启动 dev.example.com 时,我仅通过复制 example.com 的 nginx 配置,如下所示:

server {
    listen 80;
    server_name example.com www.example.com dev.example.com;
    root /var/empty;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name  dev.example.com;
    root /home/dev;
    index index.html;
    charset utf-8;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Xss-Protection "1; mode=block" always;

    ssl on;
    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_prefer_server_ciphers on;
    ssl_ciphers ...
...
}
server {
    listen 443 ssl http2;
    server_name  example.com www.example.com;
    root /home/example;
    index index.html;
    charset utf-8;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Xss-Protection "1; mode=block" always;

    ssl on;
    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_prefer_server_ciphers on;
    ssl_ciphers ...
...
}

完成上述操作后,我现在可以访问 example.com 的所有三个变体。但是,无法访问 other.com,因为我得到了(释义):

SSL_协议_错误

此网站服务不安全

在 Chrome 中,而 Firefox 重定向到 Google(我的默认主页)。

other.com 的配置与 example.com 相同,除了 dev 子域之外。我没有为 dev.example.com 设置任何位置块。配置文件的其余部分仅包含 ssl 证书指针和位置块。

所以我有点困惑为什么 dev 子域名会关闭 other.com。

答案1

解决方案可能在于 nginx 如何处理默认服务器以及我如何为站点创建配置。执行curl -I http://example.com显示了一些错误的重定向,这可能使 nginx 寻找的默认服务器不是我想要的。

我的解决方案是,实际上为服务器更好地拼写。我这样做了:

server {
    listen 80;
    server_name dev.example.com;
    root /var/empty;
    return 301 https://dev.example.com$request_uri;
}

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/empty;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name  dev.example.com;
    root /home/dev;
...

server {
    listen 443 ssl http2;
    server_name  example.com www.example.com;
    root /home/bc;
    ...
}

相关内容