You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Cloudflare遵循DigitalOcean平台FastAPI应用的Cache-Control指令?

FastAPI + Cloudflare 缓存异常问题解决方案

1. 配置Cloudflare遵循缓存指令的方法

  • 进入Cloudflare控制台对应域名的缓存→缓存规则,创建新规则:
    • 匹配条件设为「所有请求」,缓存行为选择「遵循源站的 Cache-Control 头」(部分版本显示为「尊重 origin 缓存指令」)
    • 删除或禁用所有强制缓存的页面规则/缓存规则(比如设置了「缓存级别: 忽略查询字符串」「强制缓存所有GET请求」的规则)
    • 关闭「自动缓存静态资源」中的强制缓存选项,或调整为仅缓存源站明确允许的资源
    • 注意:Cloudflare开发模式默认3小时后自动失效,测试时需确认其处于激活状态

2. 特定端点/参数绕过Cloudflare缓存的方案

  • 路径匹配绕过:创建缓存规则,匹配特定路径(如/api/fresh-data/*或精确端点/api/user/profile),缓存行为设为「不缓存」(Bypass cache)
  • 请求头匹配绕过:创建规则,匹配请求头包含Cache-Control: no-cache或Cache-Control: no-store,缓存行为设为「不缓存」
  • 查询参数匹配绕过:针对带?refresh=1这类参数的请求,创建规则匹配查询参数refresh存在,缓存行为设为「不缓存」
  • FastAPI端配合:在需要绕过缓存的端点中返回Cache-Control: no-store, must-revalidate响应头,确保Cloudflare能识别(前提是已配置遵循源站指令)

3. 生产环境x-fastapi-cache始终显示MISS的原因

  • Cloudflare直接返回了自身缓存的响应,请求根本没到达FastAPI应用,导致应用级缓存(fastapi-cache2)完全没被调用,自然返回MISS
  • Cloudflare缓存规则优先级高于源站指令,比如存在强制缓存所有GET请求的规则,覆盖了源站返回的Cache-Control头
  • 检查响应头CF-Cache-Status:如果是HIT,说明Cloudflare直接返回缓存;如果是MISS但x-fastapi-cache仍为MISS,需排查生产环境Redis连接是否正常、缓存键生成逻辑是否和本地一致(比如是否遗漏了查询参数、用户头信息等)
  • Cloudflare可能修改了请求头,导致应用生成的缓存键与预期不符,无法命中已存在的缓存

最终需求实现(Cloudflare收到no-cache时绕过缓存)

  1. 新增Cloudflare缓存规则:匹配请求头Cache-Control: no-cache,缓存行为设为「不缓存」
  2. 确保Cloudflare全局遵循源站Cache-Control指令,让应用返回的缓存策略生效
  3. 验证FastAPI生产环境的Redis连接正常,缓存键生成逻辑与本地一致
  4. 测试时用curl -H "Cache-Control: no-cache" https://your-domain.com/api/xxx,查看CF-Cache-Status为MISS,同时x-fastapi-cache能正常显示HIT/MISS

内容的提问来源于stack exchange,提问作者JJ Fantini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:37:26