子域名访问时重定向到父域名的原因及解决方法是什么?
排查和解决步骤
第一步:先确认重定向来源
先不要用浏览器测试(避免旧的重定向缓存干扰结果),直接在命令行执行以下命令查看响应头:
curl -I http://sub.example.com
看返回结果里的Server字段和Location字段,判断是Nginx返回的重定向还是Node.js后端返回的重定向。
常见原因和对应解决方案
- 原因1:浏览器缓存了旧的重定向规则
解决:用浏览器无痕模式访问,或者清空浏览器DNS缓存、静态资源缓存后重试,这是最常见的低级错误诱因。 - 原因2:Node.js后端配置了错误的重定向逻辑
你Nginx配置里已经通过proxy_set_header Host $host把真实请求的域名传给了后端,如果Node.js服务里配置了域名校验、默认baseUrl或者重定向规则(比如只允许www.sub.example.com访问,其他域名都跳转到主域名),就会出现这个问题。
解决:检查Node.js代码里的域名相关配置,比如Express框架要检查有没有全局重定向中间件、vhost配置,或者baseUrl参数是否写死为example.com。 - 原因3:Nginx存在冲突的配置项
你当前配置里加载了两个额外的配置目录:
如果这两个目录下有其他监听80端口的server块,且匹配优先级比你当前写的server块更高,就可能匹配到include /etc/nginx/conf.d/*.conf; include /etc/nginx/default.d/*.conf;sub.example.com的请求并触发重定向。
解决:执行以下命令打印所有加载的Nginx配置,排查有没有冲突的server块:
找到冲突配置后调整优先级或者删除冗余配置,之后执行sudo nginx -T | grep -A 20 "server_name"sudo nginx -s reload重启生效。 - 原因4:DNS/CDN侧配置了重定向规则
如果你给域名配置了CloudFront等CDN服务,或者Route53里配置了重定向记录,也可能触发该跳转。可以检查AWS相关服务的规则配置。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

