Azure CDN搭配Cloudflare架构下站点缓存返回旧版本问题咨询
排查与解决方案
1. 逐层校验缓存响应头优先级
两层CDN+浏览器端均存在独立缓存逻辑,即使关闭Cloudflare通用缓存开关,仍需从源到端逐层验证响应头配置:
- 直接请求Azure Blob存储的原始资源,检查
Cache-Control、ETag、Last-Modified头是否符合预期:React应用的HTML入口文件建议设置Cache-Control: no-cache,带hash后缀的静态资源(JS/CSS/图片等)设置Cache-Control: public, max-age=31536000, immutable - 直接请求Azure CDN地址,校验返回的缓存头是否和Blob存储返回的一致,确认未被Azure CDN的自定义规则覆写
- 请求Cloudflare域名的资源,重点校验两个字段:
- 检查
CF-Cache-Status头:若值为HIT说明Cloudflare仍在缓存该资源,需排查页面规则、缓存规则的优先级,是否存在例外规则未生效的情况 - 检查
Cache-Control头是否被Cloudflare的边缘TTL设置覆写,历史配置的自定义响应头规则未删除的情况下,会覆盖通用缓存开关的逻辑
- 检查
2. 清理所有层级的存量缓存
关闭缓存开关仅会停止新资源的缓存写入,已缓存的旧资源不会自动失效:
- 手动触发Cloudflare全站缓存清除:在Cloudflare后台「缓存」-「配置」页点击「清除所有内容」,全球节点生效需要等待5-15分钟
- 同步刷新Azure CDN的全部缓存内容,避免Azure CDN的旧资源透传给Cloudflare返回给用户
3. 解决用户浏览器端存量强制缓存
如果之前的配置给入口HTML设置了较长的max-age,用户本地浏览器的强制缓存不会随服务端配置修改自动失效:
- 确保所有层级的缓存规则都给HTML入口文件配置
Cache-Control: no-cache,禁止任何节点和浏览器对HTML做强制缓存 - 已产生的用户本地缓存,可通过后续版本部署时新增Service Worker逻辑提示用户手动刷新,或临时给HTML资源加唯一查询参数解决
4. 排查Cloudflare隐藏缓存逻辑
Cloudflare部分优化功能的缓存逻辑独立于通用缓存开关:
- 确认「自动优化」类功能全部关闭:Auto Minify、Rocket Loader、自动图片格式转换等功能会主动缓存静态资源,不受通用缓存开关控制
- 确认没有配置Worker/Page Function:自定义Worker代码如果包含缓存逻辑,会覆盖后台的所有通用缓存配置
- 确认Cloudflare DNS的橙色云开关状态,若近期切换过橙色/灰色云,需等待DNS TTL完全过期后再验证故障是否恢复
内容的提问来源于stack exchange,提问作者John Vidal
相关产品推荐
相关产品推荐

