使用 .conf 设置在 Nginx 中将 HTTP 重写为 HTTPS

Rewriting HTTP to HTTPS in Nginx, using .conf settings

我在这里缺少什么?

server {
    listen 80;
    listen 443;

    if ($scheme = http) { rewrite ^(.*)$ https://domain.com permanent; }
    if ($host ~* ^www\.) { rewrite ^(.*)$ https://domain.com permanent; }
    ...
}

它给我重定向循环错误。

我会根据现有信息对此进行拍摄。当将所有请求从 http 重定向到 https 时,为端口 80 使用一个单独的服务器块是个好主意。同样,当将所有请求从一个主机名重定向到另一个主机名时,为每个主机名创建一个单独的服务器块也是一个好主意。

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

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

server {
    listen 443;
    server_name www.domain.com;

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

server {
    listen 443;
    server_name domain.com;

    ...
}

所以我们在端口 80 上侦听主机名并重定向到 https://domain.com,还在端口 443 上侦听 https://www.domain.com 并将这些请求也重定向到 https://domain.com。这使您的 Nginx 配置清晰易读。

重要提示:请注意,如果您的 SSL 证书不包含 www.domain.com,那么对 https://www.domain.com 的请求将导致证书错误并且相当讨厌浏览器警告。在这种情况下,您应该将您的证书替换为包含两个主机名的证书。