在 nginx 中将所有非 www https 流量重定向到 www https 的通用方法

在 nginx 中将所有非 www https 流量重定向到 www https 的通用方法

是否可以将重定向放在 1 个单独的服务器块中,以将任何没有 www 的 https(端口 443)重定向到 https://www...?我不想将该重定向放在每个特定域的每个单独的服务器块中。

我目前有这个,但它不允许 nginx(在 Windows 中)启动:

server {
    listen 443 ssl;
    server_name _;

    if ($host !~* ^www\.(.*)$) {
        return 301 https://www.$host$request_uri;
    }
}
server {
    listen       443 ssl;
    server_name  example.com;

    # ...
}
server {
    listen       443 ssl;
    server_name  anotherexample.com;

    # ...
}

答案1

你的配置需要看起来像这样:

server {
    listen 443 ssl default_server;
    server_name _;

    ssl_certificate /path/to/$ssl_server_name.crt;
    ssl_certificate_key /path/to/$ssl_server_name.key;

    return 301 https://www.$host$request_uri;
}

您需要拥有名称与您的域名匹配的证书文件。如果您的域名是example.com,则需要拥有example.com.crtexample.com.key

此外,您需要确保这是default_server针对端口 443 的唯一阻止。

相关内容