这里缺少什么?
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
的请求将导致证书错误和相当恶劣的浏览器警告。在这种情况下,您应该将证书替换为同时包含两个主机名的证书。