Webdock.io服务器Nginx配置:将www域名重定向至非www域名的问题求助
Webdock.io服务器Nginx配置:将www域名重定向至非www域名的问题求助
嗨,我看了你的问题和现有配置,问题的核心在于主server块的server_name同时包含了非www和www域名,导致Nginx会优先把www的HTTPS请求匹配到主server块,而不是你新加的专门处理www重定向的server块,所以你的重定向规则根本没被触发。
下面给你一套清晰的修复方案,保证能解决这个问题:
步骤1:调整主server块的域名范围
把主server块里的server_name改成只保留非www域名,让它只处理https://my-clients-domain.com的请求:
server_name my-clients-domain.com;
步骤2:将www重定向server块放在主server块之前
把你之前写的www重定向server块移到主server块的前面(Nginx按配置文件顺序匹配server块,提前放置能避免匹配优先级混乱),内容保持不变:
server { listen [::]:443 ssl ipv6only=on; listen 443 ssl; server_name www.my-clients-domain.com; return 301 https://my-clients-domain.com$request_uri; ssl_certificate /etc/letsencrypt/live/my-clients-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/my-clients-domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
步骤3:优化HTTP端口的重定向(可选但推荐)
原来Certbot生成的80端口server块会把HTTP请求转到对应域名的HTTPS(比如HTTP的www转到HTTPS的www),你可以改成直接跳转到HTTPS的非www域名,减少一次重定向,提升用户体验:
server { listen 80 default_server; listen [::]:80 default_server; server_name my-clients-domain.com www.my-clients-domain.com; # 直接将所有HTTP请求重定向到HTTPS非www域名 return 301 https://my-clients-domain.com$request_uri; }
最后验证并重启Nginx
修改完配置后,先检查配置语法是否正确:
nginx -t
如果输出test is successful,就可以重启Nginx让配置生效:
systemctl restart nginx
这样修改后,不管用户访问http://www.my-clients-domain.com还是https://www.my-clients-domain.com,都会被正确重定向到https://my-clients-domain.com,而且不会和现有配置产生冲突。核心逻辑就是让每个server块只负责对应域名的请求,避免Nginx出现匹配混乱的情况~
备注:内容来源于stack exchange,提问作者skribe
相关产品推荐
相关产品推荐

