Cloudflare访问根域名返回旧版index.html 仅直接访问index.html返回新版如何解决
故障原因
- Cloudflare对目录路径(根路径
/)和具体文件路径(/index.html)的缓存是完全独立的条目,本次操作失效核心是根路径的缓存没有被真正清除,常见触发场景:- 你配置的页面/缓存规则给根路径
/设置了更长的边缘缓存TTL,甚至开启了分层缓存,常规单路径清除没有命中深层缓存节点的条目 - Cloudflare近期调整了自定义清除的路径匹配逻辑,你提交的根路径如果不带末尾斜杠(
https://example.com),会和实际存储的带末尾斜杠的根路径缓存(https://example.com/)匹配失败,导致清除操作无效
- 你配置的页面/缓存规则给根路径
- 次要原因是源站配置异常:源站对根路径
/的请求返回旧内容,Cloudflare仅正常代理缓存了源站的响应,清除Cloudflare缓存自然无法解决问题
修复方案
- 优先做验证排查:登录Cloudflare控制台进入「缓存」-「配置」,执行「清除所有内容」操作,等待2分钟后用无痕模式访问根域名,若此时返回新版内容,可确定是单路径清除匹配失败导致的问题,后续不需要每次清全量,按下面的流程调整即可
- 若清除全量缓存仍无效,直接绕开Cloudflare验证源站:本地修改hosts绑定源站IP到域名,分别请求
/和/index.html,如果/返回旧内容,调整源站的默认文档配置,关闭源站对根路径的静态缓存即可 - 后续更新优化方案:
- 自定义清除缓存时,根路径统一提交
https://example.com/*通配符路径,会同时命中根路径和所有子路径的缓存条目,避免匹配失败 - 给根路径单独配置页面规则:匹配
https://example.com/,设置边缘缓存TTL不超过2小时,避免缓存时间过长无法及时更新 - 可给
index.html添加Cache-Control: no-cache响应头,配置Cloudflare缓存规则遵循源站缓存头,每次请求都会回源验证文件版本,不需要手动清除缓存
- 自定义清除缓存时,根路径统一提交
内容的提问来源于stack exchange,提问作者dijon
相关产品推荐
相关产品推荐

