CDN 缓存不更新怎么办?缓存规则、刷新与回源排查指南
CDN 缓存不更新怎么办?缓存规则、刷新与回源排查指南
网站修改了图片、CSS、JavaScript 或页面内容,但访问时仍显示旧版本,通常与 CDN 节点缓存、浏览器缓存、缓存键或源站响应有关。处理这类问题时,应先确认旧内容来自哪里,再选择刷新、版本化或调整规则,避免盲目清空全部缓存。
一、判断是浏览器缓存还是 CDN 缓存
先使用无痕窗口访问,并在不同网络或设备上测试。如果只有单个浏览器显示旧内容,优先清理本地缓存或检查 Service Worker;如果多个地区都返回旧版本,则可能是 CDN 节点缓存。还可以查看响应头中的 Age、Cache-Control、ETag、Last-Modified 以及服务商提供的缓存命中标识。
二、检查源站内容是否已经更新
在刷新 CDN 前,应确认源站文件本身是最新版本。可以临时通过源站地址或指定解析方式访问,并核对文件内容、更新时间和实际路径。若源站部署到了错误目录,或者负载均衡后的某台服务器仍保留旧文件,刷新 CDN 也只能再次缓存旧内容。
三、理解缓存规则和优先级
不同类型内容应采用不同策略。带哈希文件名的 CSS、JavaScript 和图片可以设置较长缓存;频繁变化的 HTML、接口结果和登录页面应缩短缓存或设置不缓存。规则重叠时,要确认目录规则、文件后缀规则和状态码缓存的优先级,防止动态页面被意外缓存。
四、正确使用刷新与预热
少量文件更新时,优先刷新具体 URL;目录级改版可刷新目录;全站刷新影响范围大,可能造成大量请求瞬间回源,应谨慎使用。刷新完成后再进行预热,可让重点资源提前分发到节点,降低首次访问的回源压力。提交任务后还要等待状态完成,而不是只看按钮点击成功。
五、给静态资源增加版本号
对前端构建文件使用内容哈希是最稳定的方式,例如 app.a1b2c3.js。当文件内容变化时生成新地址,浏览器和 CDN 会把它视为新资源。简单查询参数也可用于版本控制,但要先确认 CDN 的缓存键是否包含查询参数,否则不同版本可能仍命中同一缓存。
六、检查缓存键设置
缓存键可能包含域名、路径、查询参数、请求头或 Cookie。若忽略了决定内容差异的参数,不同用户可能拿到相同结果;若包含过多无关参数,又会降低命中率。登录态页面和个性化接口尤其要避免公共缓存敏感内容。
七、排查 301、404 和错误页面缓存
CDN 可能缓存重定向或错误状态。源站修复后若仍看到旧的 301、404 或 5xx,应检查状态码缓存时间并刷新对应 URL。域名切换期间还要确认 HTTP 与 HTTPS、带 www 与不带 www 是否分别建立了缓存。
八、验证更新是否真正生效
刷新后从多个地区再次请求,比较响应状态、内容哈希、Last-Modified 和节点命中信息。重点检查首页、核心静态资源、移动端页面及常用接口。保留变更时间、刷新任务和验证结果,方便出现问题时追踪。
总结
CDN 缓存不更新应按照“浏览器—节点—源站—规则—缓存键”的顺序排查。日常发布通过静态资源版本化和精细缓存策略减少强制刷新,重大变更再配合定向刷新与预热,可以兼顾内容及时性、访问速度和源站稳定性。