为什么 Cloudflare 缓存了动态页面如何设置不缓存?

文章导读
Cloudflare 默认策略下 HTML 等动态内容通常不缓存,若出现缓存多因配置了“缓存所有内容”规则。解决核心是在控制台针对特定路径将缓存级别设为“绕过”。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

Cloudflare 默认策略下 HTML 等动态内容通常不缓存,若出现缓存多因配置了“缓存所有内容”规则。解决核心是在控制台针对特定路径将缓存级别设为“绕过”。

先说结论:动态页面被缓存通常是因为误开了全站缓存规则,需在 Cache Rules 或 Page Rules 中将对应路径的缓存级别改为“Bypass”。

  • 适合:后台管理路径、API 接口、用户中心等实时性要求高的动态内容
  • 先确认:检查是否开启了 Cache Everything 或全站缓存的页面规则
  • 验收:使用 curl 检查响应头 cf-cache-status 是否为 DYNAMIC 或 BYPASS

快速处理思路

Cloudflare 主要通过控制台配置,无需服务器命令。登录 dashboard 后进入 Caching 页面,优先使用 Cache Rules 新建规则,匹配动态路径后设置 Cache Level 为 Bypass。若使用免费版且规则数量受限,可检查是否占用了 Page Rules 名额。

为什么会这样

Cloudflare 默认只缓存特定的静态文件扩展名(如 css、js、图片),HTML 页面通常被视为动态内容直接回源。公开资料中提到,默认缓存策略下,静态文件的边缘缓存时间通常较短,部分场景仅为 2 小时左右。如果动态页面被缓存,通常是因为用户手动创建了 Cache Rules 或 Page Rules,将缓存级别设为了“Cache Everything”,覆盖了默认行为。这会导致源站内容更新后,CDN 节点仍在旧缓存期内,用户看到旧页面。

分步处理

1. 登录 Cloudflare 控制台,选择对应域名。

2. 进入左侧 Caching > Cache Rules(推荐)或 Page Rules。

3. 点击 Create rule,设置匹配条件。例如 Field 选择 URI Path,Operator 选择 Contains,Value 填写动态路径关键词(如 wp-admin、api、user)。

4. 在 Then 设置中,Cache Level 选择 Bypass(绕过缓存)。

5. 保存规则。注意规则优先级,绕过缓存的规则应置于缓存所有内容的规则之上,确保优先匹配。

怎么验证是否生效

使用 curl 命令检查响应头,确认缓存状态:

curl -I https://yourdomain.com/dynamic-path

关注返回头中的 cf-cache-status 字段。若设置成功,该字段应显示 DYNAMICBYPASS,且 cache-control 头部应包含 no-cacheprivate 等指示。若仍显示 HIT,说明规则未匹配或优先级低于其他缓存规则。

也可结合 grep 快速查看关键状态:

curl -I -s https://yourdomain.com/dynamic-path | grep -i cf-cache-status

常见坑

1. 规则优先级错误:Cloudflare 按顺序匹配规则,若“缓存所有”规则排在“绕过缓存”规则之前且匹配成功,后者可能不生效。

2. 免费版限制:免费版本 Cloudflare 仅支持 3 条页面规则,若已用于域名跳转等,剩余名额可能不足,建议优先使用 Cache Rules。

3. Cookie 影响:若页面依赖 Cookie 识别用户,使用 Bypass 模式时无需配置 Cache Key,请求会直接回源;若必须缓存动态内容,则需配置 Cache Key 包含 Cookie 以区分用户。

4. 清除缓存:修改规则后,建议手动清除现有缓存,避免旧缓存文件继续生效。

参考来源