Nginx 将 www 重定向到 no-www (SSL) 会产生不安全的情况

Nginx 将 www 重定向到 no-www (SSL) 会产生不安全的情况

我正在运行一个 Nginx 服务器,它使用 SSL 为我的网站提供服务。为了支持 SSL,我使用 LetsEncrypte。我的 Nginx 配置文件sites-available如下所示:

server {
        listen 80;
        server_name domain.nl anotherdomain.nl;
#        return 301 https://$server_name$request_uri;
        return 301 https://domain.nl$request_uri;
}

server {
        listen 80;
        server_name www.domain.nl;
        return 301 $scheme://domain.nl$request_uri;
}

server {
        listen 443;

        server_name domain.nl;

        # SSL
        ssl_certificate /etc/letsencrypt/live/domain.nl/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.nl/privkey.pem;

        include snippets/ssl-params.conf;

        location / {
                proxy_pass http://localhost:6000;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

如果您访问,我的网站可以完美运行。在此示例中,domain.nl在第一个服务器块中,我还有另一个域。这个也运行良好,并重定向到没有 www 的安全网站。不知何故,在域之前使用会导致浏览器出现“您的连接不安全”消息。我为创建了一个新的服务器块,并尝试将其添加到第一个服务器块。两者都不起作用。anotherdomain.nlwww.www.

我看不出这有什么问题。有什么提示吗?

答案1

您需要创建另一个server块以供 SSLwww.domain.nl重写domain.nl,如下所示:

server {
    listen 443 ssl;
    server_name www.domain.nl;

    ssl_certificate /etc/letsencrypt/live/domain.nl/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.nl/privkey.pem;

    include snippets/ssl-params.conf;

    return 301 https://domain.nl$request_uri;
}

您还必须确保您的证书对www.domain.nl和均有效domain.nl

www.domain.nl您当前的配置导致 nginx 使用端口 443 的默认值进行处理server,因为没有具有该域名的 SSL 服务器块。如果指令中有一个带有选项server的单独块,则该块将用于请求。如果不存在这样的服务器块,则将由 nginx 确定的默认值进行处理。default_serverlisten

相关内容