强制 https 的规则既加在 CDN 边缘又写在源站 再加上补斜杠规则 访问 /p/123 时 301 到 /p/123/ 再 301 回不带斜杠 浏览器报 ERR_TOO_MANY_REDIRECTS 蜘蛛抓取诊断直接报重定向次数过多

一开始怀疑是「CDN 回源协议是 http 源站又要求 https」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。边缘和源站各写了一套 https 跳转 规则互相覆盖。还有一种是补斜杠规则没有排除已经带斜杠的地址。

不容易想到的是,部分规则用了 302 每次请求都重新判断。

跟一遍跳转链看在第几跳打转

curl -sIL https://www.example.com/p/123 | grep -i -E 'HTTP/|location'

只在一层做 https 跳转 另一层改成回源跟随

return 301 https://$host$request_uri;

补斜杠规则加负向条件

if ($uri !~ '.*/$') { return 301 $uri/; }

末了清掉 CDN 上缓存的旧 301

curl -X PURGE https://www.example.com/p/123

恢复的判定其实很直接。跳转链最多两跳落定 抓取诊断不再报重定向过多 日志里同一地址连续 301 的记录消失。

容易忽略的是,跳转规则只留一处权威 边缘和源站同时管 一定会在某个条件上互相打回。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189