CDN 与源站不要同时强制跳转。只保留一处 301/302 到 HTTPS,通常放在 CDN。
浏览器报 “重定向次数过多 / ERR_TOO_MANY_REDIRECTS”,在接入 CDN 后非常常见,而且九成是 HTTPS 策略打架。
------------------------------------------------
一、经典错误拓扑
------------------------------------------------
用户 -> CDN(强制把 HTTP 301 到 HTTPS)
-> 源站(又把请求 301 到 HTTPS 或另一 Host)
-> CDN 再处理
-> 循环
还有变种:
- 源站强制 www,CDN 或程序又强制非 www。
- 回源是 HTTP,源站 301 到 HTTPS 公网域名,请求再次打到 CDN。
- 应用层(WordPress/Nginx/宝塔)与 CDN 同时开“强制 HTTPS”。
------------------------------------------------
二、正确做法
------------------------------------------------
1. 只在一处做强制 HTTPS。推荐:CDN 开强制 HTTPS,源站关闭强制跳转,回源用 HTTP 或源站内网/IP 直回。
2. 如果源站必须 HTTPS 回源:CDN 不要再对回源侧制造二次跳转;回源协议选 HTTPS,源站虚拟主机直接 200,而不是 301。
3. www 与根域:只保留一个 canonical,另一边做单次 301,避免双侧互相跳。
------------------------------------------------
三、OECDN 上怎么配
------------------------------------------------
- 域名编辑里的 HTTP 访问开关 / 强制 HTTPS 开关:按业务显式选择,不要默认以为“开了更安全就两边都开”。
- 证书绑定正常、HTTPS 可访问后,再开强制 HTTPS。
- 改完后用无痕模式或 curl -I http://域名 看 Location 是否只跳一次。
------------------------------------------------
四、快速验证
------------------------------------------------
curl -I http://你的域名
curl -I https://你的域名
观察:
- HTTP 应最多一次跳到 HTTPS
- HTTPS 应直接 200/业务 3xx,不应再跳回 HTTP
- Location 主机名不应在 a.com / www.a.com / 回源 IP 之间来回甩
------------------------------------------------
五、程序本身跳转过多
------------------------------------------------
登录态、伪静态、插件 SEO、多语言域名,也可能自身 301 链过长。此时先绕过 CDN 直连源站复现;源站都循环,修源站;只有过 CDN 才循环,修 CDN/回源协议。