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