GUIDE 04
定位重定向循环与过长链路
循环通常来自两个组件各自执行了一条“看起来正确”的规则。排查的重点是找出每一跳由谁返回,以及它为什么认为当前地址不正确。
先区分循环和长链
循环会再次出现已经访问过的 URL,例如 A → B → A;长链则不断出现新地址,直到浏览器或工具达到上限。两者都会表现为页面无法打开或速度很慢,但修复方法不同。先记录完整 Location 序列,不要只看最终错误文字。
最常见的四种循环
HTTP 与 HTTPS 往返
外层代理已经终止 TLS,并通过 HTTP 连接源站。源站不知道原始请求是 HTTPS,于是再次跳到 HTTPS;某些配置又把它还原或缓存成 HTTP。检查 X-Forwarded-Proto、可信代理列表和应用生成绝对 URL 的方式。
www 与非 www 往返
CDN 规定使用 www,应用 canonical 或租户配置却规定非 www。明确唯一规范主机名,并让最外层一次完成。还要检查目标 Location 是否硬编码了另一个主机。
尾斜杠与路由规范冲突
Web 服务器添加尾斜杠,应用框架又移除尾斜杠。文件与目录规则、语言前缀和大小写规范也可能形成类似往返。不要在两个层对同一字符串做相反转换。
登录与 Cookie 循环
认证系统把未登录用户送到登录页,登录页因 Cookie 域、Secure、SameSite 或回调地址错误又认为用户应返回原页。无 Cookie 的服务器检测只能展示公开链路,认证问题还需要浏览器网络面板和服务端会话日志。
逐层排查方法
- 用检测器记录每一跳的状态、Location、Server 和 IP。
- 判断响应来自 CDN、反向代理还是应用;必要时在授权范围内直连源站对比。
- 暂时只停用一层的相关规则,观察链路变化,避免同时改多处。
- 检查代理传递的 Host、Proto、Port,以及应用的可信代理设置。
- 清除对应 301/308 缓存或使用全新客户端复测。
- 修复后测试所有入口组合,而不是只测试刚才出错的一个 URL。
生产环境:不要为了排查循环关闭全站 HTTPS、安全认证或 CDN 防护。优先使用备份配置、测试域名、源站限制访问和逐条规则切换。
过长链路如何压缩
把每次历史迁移都追加到旧规则后面,会形成 A → B → C → D。应定期把仍有流量的旧入口直接更新到当前最终地址,同时保留映射语义。规范化顺序也可以合并:HTTP、主机名和旧路径最好在同一责任层一次完成。
修复后的验证
确认链路中不再重复 URL,最终状态符合预期,总跳转数下降,并且不同 User-Agent、地区和缓存状态得到一致结果。随后观察真实访问日志,确认没有另一组入口落入新循环。