提交完预热,控制台转了半天,状态回来是失败的;更气人的是提示成功,用户访问照样回源——这就是最典型的 CDN预热不成功。很多人第一反应是开个工单去抱怨,但绝大多数情况,问题出在自己这边的两个动作上:源站没让 CDN 的节点进来,或者你把预热当成了刷新。这两个事儿一旦搞混,后面怎么调都是白费劲。

先弄明白预热到底干了件什么事
预热不是把内容推给所有节点,也不是让缓存立刻失效。它的逻辑其实很朴素:你给 CDN 平台一串 URL,平台安排各个边缘节点替你去源站拉一次,拉回来的东西按缓存规则存在节点本地。这样第一个真实用户访问时,节点上已经有货了,不用等他来触发第一次回源。所以预热能不能成,就取决于两件事——节点能不能顺利回源拿到内容,以及拿到之后愿不愿意缓存。刷新正好是反着来的操作,它是把节点上已有的东西标记成过期或者直接删掉,下次访问重新回源。一个往里塞,一个往外清,这俩混着理解,排查思路就会一直走偏。
CDN预热不成功,第一步先看回源通不通
别急着在控制台里翻来翻去,先去源站看日志。预热提交后的几分钟内,源站的 access log 里应该出现来自 CDN 节点回源 IP 的请求。如果一条都没有,那问题基本锁死在源站这一侧。常见的是防火墙或者安全组只放行了普通用户访问,把回源段 IP 给挡了;有些机器上装了 WAF 或者主机防护,默认把高频、带特殊 User-Agent 的请求当扫描打掉,而回源请求长得就很像扫描器。还有一种更隐蔽的,源站做了 IP 白名单,但 CDN 平台的回源 IP 段会调整,你今天放行的段以后不用了,你以为还开着。这些一律以各服务商官方文档公布的回源 IP 列表为准,别凭记忆配。
如果日志里能看到请求,但状态码是 403、404 或者 5xx,那就是应用层的问题了。403 多半是权限或者防盗链规则拦的;404 往往是 URL 拼错、协议头不对(源站只跑 https,你提交的是 http),或者尾巴上挂了个多余的参数;5xx 就是源站自己扛不住,比如一次提交几百上千条 URL,回源量瞬间把后端小机器打满。这种时候分批提交,比一口气全扔进去稳得多。
第二步:预热不等于刷新
这个坑我见得太多了。页面上更新了内容,兴冲冲提交预热,结果用户还是看到旧的,就断定预热没用。实际上节点上已经有这份文件的缓存,预热请求过去,节点认为我本地有货,直接回你一个已缓存的结果,根本不会再去源站拉新的。这时该做的是刷新,先把旧缓存清掉,之后再预热才有意义。顺序错了,试一百遍也是同一个结果。另外提一句,目录级和 URL 级预热差别不小,有的平台只认具体文件,你提交一个目录它可能直接忽略,状态却给你显示成功。
缓存规则会在后面悄悄把活干掉
还有一种情况是回源成功、日志也好看,可过一会儿再看,节点上还是没存下来。多半是缓存规则在起作用。比如你给 html、json 这类后缀设了不缓存,或者过期时间设得极短,预热拉回来的内容转头就失效;再比如按目录、按参数、按 cookie 分流,规则一多,同一个 URL 在不同条件下走的策略不一样,你预热的那个版本恰好落在不缓存的那一支上。重点翻一下缓存过期时间和忽略参数这两项,八成能对上。
大小写、参数和没编码的 URL
顺带说个特别烦的细节:URL 是区分大小写的。源站上的文件叫 Logo.png,你提交的是 logo.png,在 Linux 源站上就是 404,可 CDN 平台照样接受了你的预热任务,因为它只负责把请求发出去,不负责替你判断文件在不在。路径里带中文、空格、特殊符号又没做 URL 编码的,出问题的概率也不低。提交之前把自己当爬虫,先在浏览器无痕窗口里打开一遍,能正常打开再往预热里扔。
预热之后怎么确认真的生效
别只看控制台那个绿色的成功标志。想确认,用 curl 直接看响应头里的缓存命中标识,第一次请求看是 MISS 还是 HIT,再请求一次看有没有转成 HIT。为了排除本地和中间层缓存的干扰,可以在 URL 后面挂一个没意义的随机参数——但前提是源站和 CDN 都配了忽略这个参数,否则测出来的结果不算数。大文件、视频这种,就盯回源流量曲线,预热之后是不是往下掉了,这比任何状态提示都实在。
那到底还有没有必要做预热
有人说现在带宽便宜了,回源慢一点无所谓。这话对静态小站成立,但活动页面、秒杀、大体积安装包、版本更新后的首屏文件,预热的价值还是明摆着的。省钱的办法不是不做,而是别乱做:只预热那些确定会被大量访问的 URL,别整站扫一遍;一次别提交太多,分批来;预热和刷新分清场合。工具就是工具,别指望它替你想清楚业务。
真排不出来,就按顺序走一遍:源站日志有没有回源请求,状态码是多少,缓存规则有没有把这个文件排除在外,该刷新的有没有先刷新。这四步走完,剩下的才是去问服务商。提工单的时候把 trace 或者 request id 一起贴上,人家查起来也快,别只写一句预热失败就完事。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!