接上 CDN 后首页报 ERR_TOO_MANY_REDIRECTS,curl 跟到第十跳还是 301,Location 在加速域名和源站域名之间来回换。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,源站配了强制跳到加速域名,CDN 回源时又带着源站 Host,源站一看不是自己的域名就再跳一次。两边都在纠正对方,循环闭不上。

「CDN 回源重定向循环」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。

if ($host = 'origin.example.com') { break; }
return 301 https://www.example.com$request_uri;

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,源站的强制跳转加判断,回源 Host 是源站域名时直接放行;CDN 的回源 Host 改成加速域名,避免触发源站的域名校验;用 curl -I 跟三跳,确认 Location 不再回到起点。

最后用这个标准收尾,curl -I 首页只跳一次就到 200,浏览器不再报重定向过多。

作者 9823189