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