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



这里缺少什么?

server {
    listen 80;
    listen 443;
    if ($scheme = http) { rewrite ^(.*)$ https://domain.com$1 permanent; }
    if ($host ~* ^www.) { rewrite ^(.*)$ https://domain.com$1 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的请求将导致证书错误和相当恶劣的浏览器警告。在这种情况下,您应该将证书替换为同时包含两个主机名的证书。

最新更新