如果我在https上,Nginx无法将非www重定向到www:
domain 到 www.domain
我在.conf中的当前设置是:
server { listen 80; server_name www.domain domain; return 301 www.domain$request_uri; } server { listen 443; server_name domain; return 301 www.domain$request_uri; } server { listen IP_ADDRESS:443 ssl; server_name www.domain; ... }domain 到 www.domain 和 www.domain 到 www.domain 有效,但是https上的非www到www无效. /p>
如果我在第二个server块上添加了IP_ADDRESS,我会在Chrome中看到一个错误(SSL错误),并且(www和非www)都停止工作.
更新:
多亏了斯特芬(答案如下),我将自签名证书更新为*.domain而不是domain.
.conf文件已更新为以下格式:
ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; server { listen 80; server_name www.domain domain; return 301 www.domain$request_uri; } server { listen 443 ssl; server_name domain; return 301 www.domain$request_uri; } server { listen 443 ssl; server_name www.domain; ... }解决方案
这可能是因为您没有domain的证书,而只有www.domain或* .domain的证书.参见 Nginx重定向www并以裸露的http/https到www 或 serverfault/questions/579916/nginx-redirect-https-www-to-https-non-www-without-untrusted-connection-warn/579917#579917 .
Nginx isn't working to redirect non-www to www if I'm on https:
domain to www.domain
My curent setup in .conf is:
server { listen 80; server_name www.domain domain; return 301 www.domain$request_uri; } server { listen 443; server_name domain; return 301 www.domain$request_uri; } server { listen IP_ADDRESS:443 ssl; server_name www.domain; ... }domain to www.domain and www.domain to www.domain works, but non-www to www on https isn't working.
If I added the IP_ADDRESS on the second server block, I get an error in Chrome (SSL error) and both (www and non-www) stop working.
UPDATE:
Thanks to Steffen (below answer), I updated the self-signed certificate to be *.domain and not domain.
The .conf file was updated under this format:
ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; server { listen 80; server_name www.domain domain; return 301 www.domain$request_uri; } server { listen 443 ssl; server_name domain; return 301 www.domain$request_uri; } server { listen 443 ssl; server_name www.domain; ... }解决方案
This is probably because you don't have a certificate for domain, but only for www.domain or *.domain. See Nginx redirect www and naked http/https to www or serverfault/questions/579916/nginx-redirect-https-www-to-https-non-www-without-untrusted-connection-warn/579917#579917 for details.
更多推荐
Nginx:将非www重定向到https上的www
发布评论