CDN 控制台里的回源协议选的是 HTTP,源站又开了全站强制 HTTPS。接入后大部分页面打不开,浏览器提示重定向次数过多,CDN 侧日志显示每次回源都在 301 和 200 之间来回。

一开始怀疑是「源站的强制跳转规则没排除内网回源段 IP」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。回源用 http 源站 301 到 https CDN 又把跳转结果重新回源成 http。另一种情况是CDN 没有跟随回源跳转 直接把 301 透传给用户。

少数情况下是HSTS 已下发 浏览器不再允许降级到 http。

手工模拟一次回源看跳转链

curl -sI -H 'Host: www.example.com' http://10.0.0.12/p/123 | grep -iE '^HTTP|location'

随后把回源协议改成 HTTPS 并对齐端口

proxy_pass https://origin.example.com:443; proxy_ssl_server_name on;

源站放行回源段避免再次跳转

set $skip_https 0; if ($remote_addr ~ '^10\.0\.0\.') { set $skip_https 1; }

末了核对最终返回的状态与跳转次数

curl -sIL -o /dev/null -w '%{num_redirects} %{http_code}\n' https://www.example.com/p/123

改完先别撤,确认这几项。回源协议改成 HTTPS 后跳转次数回到零,页面恢复访问,CDN 日志里也不再出现反复回源的情况。

提醒一点。回源协议和源站的强制跳转必须对齐,一边降级一边强制,除了一直跳没有别的结果。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189