多个主机的 nginx 配置

多个主机的 nginx 配置

我正在使用 nginx 来管理不同域上的多个站点。

我最近刚刚更新了所有内容,以确保所有到 mainsite.com 的流量都重定向到 https(显然,使用 mainsite.com 的有效证书),但目前,其他网站都使用 http。

然而,如果有人访问https://othersite.com,它们被路由到https://mainsite.com,不匹配的证书会向他们发出警告,如果他们仍然选择继续前进,他们将被发送到 mainsite.com 上的 django 服务器。然后此过程会失败,因为 othersite.com 不是该站点允许的主机。

我认为我需要的是某种捕获所有 https 流量的方法,不是转到 mainsite.com 并将其重新路由到 http 但我读到那是不可能的。

有任何想法吗?

编辑:这是我当前配置的粗略副本:-

默认配置文件

server {
    listen       80 default_server;
    return 444;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

主站点配置文件

server {
    listen 80;
    server_name www.mainsite.com mainsite.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    server_name www.mainsite.com mainsite.com;

    ssl_certificate /etc/letsencrypt/live/mainsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mainsite.com/privkey.pem;

    include /etc/nginx/sites-available/ssl.inc;
}

答案1

您没有端口 443 的默认服务器块,因此端口 443 上的所有请求都将发送到您配置的一个站点。为端口 443 创建一个配置适当的默认服务器,您的问题将得到解决,因为正如您所读到的,在协商 TLS 连接之前您无法发送重定向,而这只有在证书被接受之后才能发生。

答案2

womble 是对的。https://serverfault.com/a/838808/351483

您只需将 443 服务器块添加到默认配置即可。如果 othersite.com 不需要 HTTPS,那么您只需重定向到 http 80 服务器块即可。

相关内容