Nginx默认匹配规则干扰通配域名跳转的解决方法
解决Nginx重定向规则与默认兜底规则冲突的问题
你的问题根源在于重定向规则只监听了IPv4的80端口,而默认兜底规则同时覆盖了IPv4和IPv6的80端口。当请求通过IPv6链路访问时,Nginx找不到对应IPv6 80端口的匹配server块,就会触发默认规则的[::]:80 default_server,导致重定向失效。
按以下方式调整配置即可让两个规则协同工作:
1. 更新重定向规则,同时支持IPv4和IPv6
把原来的重定向server块修改为同时监听IPv4和IPv6的80端口:
server { listen 80; listen [::]:80; server_name *.example.com example.com; return 301 https://example.com$request_uri; }
2. 保留默认兜底规则
原有的默认规则可以保持不变,它会自动处理所有不匹配example.com及其子域名的请求(包括无Host头、非法域名的请求,以及443端口的非法请求):
server { listen 80 default_server; listen [::]:80 default_server; listen 443 default_server; listen [::]:443 default_server; server_name _; include snippets/snakeoil.conf; return 444; }
额外注意事项
- 你需要确保已经配置了对应
https://example.com的HTTPS server块,否则重定向后的请求会被默认规则拒绝。 - 修改完配置后,执行
nginx -s reload命令重新加载Nginx配置,才能让修改生效。
内容的提问来源于stack exchange,提问作者Andrew Benor
相关产品推荐
相关产品推荐

