Cloudflare CDN 缓存命中率低如何优化配置策略?

文章导读
直接调整缓存级别和规则通常是最快见效的手段,适合静态资源占比高的站点。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 故障排查:521/525 错误
  6. 常见坑
A A

直接调整缓存级别和规则通常是最快见效的手段,适合静态资源占比高的站点。

先说结论:优先检查源站响应头和控制查询字符串,再调整边缘缓存规则。

  • 先定位:确认是动态内容还是静态资源未命中。
  • 先做:关闭带参数的缓存 bypass 或设置忽略查询字符串。
  • 再验证:通过 curl 查看 cf-cache-status 头部变化。

快速处理思路

大部分缓存命中率低的问题不需要动代码,先在控制台检查配置即可。

  1. 登录 Cloudflare Dashboard,进入 Caching 页面。
  2. 确认 Cache Level 设置为 Standard 或 Aggressive。
  3. 检查是否有 Page Rules 或 Cache Rules 强制设置了 Bypass。
  4. 使用本地终端命令测试资源是否命中边缘节点。
  5. 检查 Tiered Cache 是否开启以减少回源。

为什么会这样

Cloudflare 的缓存机制默认遵循源站服务器的指示。如果源站返回的 Header 中明确告知不缓存(例如 Cache-Control: no-cache),边缘节点就不会存储副本。此外,URL 中包含查询字符串(Query String)或请求携带了特定 Cookie 时,Cloudflare 默认会认为这是动态请求,直接回源获取,导致缓存命中率为零。很多时候不是 CDN 没工作,而是配置告诉它不要缓存。

分步处理

按照以下顺序排查,每一步调整后都建议等待几分钟让配置生效。

Cloudflare CDN 缓存命中率低如何优化配置策略?

1. 检查缓存级别

在 Dashboard 的 Caching > Configuration 中,查看 Cache Level。默认是 Standard,这会缓存大多数静态资源。如果设置为 No Query String,那么带参数的 URL 都不会缓存。建议保持 Standard,并通过规则单独控制。

2. 处理查询字符串

很多静态资源加载时会带上版本参数,例如 style.css?v=1.0。默认情况下,不同的参数会被视为不同文件。可以在 Caching > Cache Rules 中新建规则,匹配静态文件扩展名,设置 Edge TTL,并选择忽略查询字符串。这样无论参数怎么变,都命中同一个缓存副本。

3. 调整源站响应头

如果源站是 Nginx 或 Apache,检查配置文件中的 Cache-Control 设置。确保静态资源包含 max-age 指令。例如在 Nginx 中:

location ~* \.(css|js|jpg|png)$ {
  add_header Cache-Control 'public, max-age=31536000';
}

注意:修改源站配置后,可能需要 purge 一次 Cloudflare 缓存才能看到新 Header 生效。

4. 避免 Cookie 穿透

如果请求携带了 Cookie,Cloudflare 默认可能 bypass 缓存。确保静态资源域名(如 static.example.com)不设置 Cookie,或者在 Cache Rules 中配置忽略特定 Cookie。

Cloudflare CDN 缓存命中率低如何优化配置策略?

5. 高级优化:开启 Tiered Cache

在 Dashboard 的 Caching > Tiered Cache 页面,将状态改为 Enabled。拓扑类型可选择 Generic 或 Smart Topology。开启后,边缘节点会先从上层节点获取缓存,减少直接回源请求,显著提升整体命中率,尤其适合多区域访问场景。

怎么验证是否生效

不要只看 Dashboard 的图表,直接用命令测试最准确。在终端执行:

curl -I https://你的域名/静态资源路径

观察返回头中的 cf-cache-status 字段。第一次请求通常是 MISS,第二次请求如果是 HIT,说明缓存已生效。如果一直是 MISS,检查 cf-cache-status 后面是否有 EXPIRED 或 DYNAMIC 标记,这能提示未命中的具体原因。

故障排查:521/525 错误

在调整 SSL 设置后,如果网站出现 521 (Web server is down) 或 525 (SSL handshake failed) 错误,通常是因为 SSL/TLS 加密模式配置不当。

  • 525 错误:多发生在开启 Full (Strict) 模式时,表示源站证书无效、过期或为自签名证书。解决方法是暂时回退到 Full 模式,并在源站部署有效的公网 SSL 证书。
  • 521 错误:表示 Cloudflare 无法连接到源站 IP。检查源站防火墙是否放行了 Cloudflare 的 IP 段,以及源站 Web 服务是否正常运行。

常见坑

  • HTML 页面强缓存:建议 HTML 文档本身不要设置长缓存,否则用户无法及时看到内容更新。
  • 登录状态干扰:用户登录后的页面通常带 Cookie,这部分流量无法缓存是正常的,不要强行优化动态内容。
  • Purge 后未预热:清除缓存后,所有节点需要重新回源获取,此时命中率会暂时下降,属于正常现象。
  • SSL 设置影响:如果 SSL/TLS 设置为 Flexible,而源站强制跳转 HTTPS,可能导致重定向循环。建议先设置为 Full,确认源站证书有效后再升级为 Full (Strict),避免直接开启 Strict 导致站点不可用。