NGINX-将 http 重定向到 https 后将 www 重定向到非 www

NGINX-将 http 重定向到 https 后将 www 重定向到非 www

我查看了类似问题的其他答案以及 DigitalOcean 等网站上的教程,但均未成功。抱歉,这可能是一个很明显的问题 - 我是新手。

本质上,我需要设置重定向,以便 http://,https://www。, 和http://www.全部重定向至 https://.

目前,https:// 运行正常,http:// 重定向到 https://。我需要重定向 www 流量,因为 SSL 证书仅针对非 www 配置。但是,当我尝试向配置中添加另一个服务器块以将 www(http 和 https)重定向到 https:// 时,服务器会关闭所有 4 个变体上的连接。

这是我的配置:

# HTTP - redirect to HTTPS
server {
    listen 80;
    server_name www.example.com example.com;
    return 301 https://example.com$request_uri;
}

# HTTPS www - redirect to non-www RESETS CONNECTION
#server {
#    listen 443;
#    server_name www.example.com;
#    return 301 https://example.com$request_uri;
#}


# HTTPS — proxy all requests to the Node app
server {
    # Enable HTTP/2
    listen 443 ssl http2;
    server_name example.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate /etc/not/my/path/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/not/my/path/live/example.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://0.0.0.0:2368/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
    }
}

有人能告诉我我做错了什么吗?我再说一遍,我知道这可能很明显,但我就是无法让它工作。我应该用 NGINX 重定向以外的其他方法来完成这个任务吗?

答案1

除非您拥有 的证书,否则您无法将www.example.comhttps 流量重定向到。SSL 协商使用域名,并且仅在协商 SSL 层后才会发生重定向。example.comwww.example.com

答案2

server {
    server_name www.example.com example.com
    listen 80;

    location / {
        rewrite ^/(.*)$ https://example.com/$1 permanent;
    }
}

server {
    server_name www.example.com;
    listen 443 ssl;

     [... ssl configuration ...]

    location / {
        rewrite ^/(.*)$ https://example.com/$1 permanent;
    }
}

server {
    server_name example.com;
    listen 443 ssl;


    [ ... main block ... ]
}

相关内容