nginx www 和非 www 到非 www https

nginx www 和非 www 到非 www https

我希望 www 和非 www 的 URL 都能在 https 上转到非 www。

我的 NGINX 配置中有以下块:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ...
}

问题是,当我想删除 www 时,example.com 的 www 仍然会在 https 上转换为 www.example.com。

我真的不明白我在这里错过了什么......

答案1

如果您拥有与两个域匹配的 SSL,最简单的方法是 301 返回。

不支持 SNI 的选项

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

if ($http_host = www.example.com) {
        rewrite  (.*)  https://example.com$request_uri;
    }
    ...
}

如果没有,您将需要 SNI 或另一个 IP 用于 www 记录,然后需要一个临时 ssl(例如来自 Letsencrypt)将您的用户重定向到正确的域。

支持 SNI 的选项

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name www.example.com;
    return 301 https://example.com$request_uri;

...
}

相关内容