基于国家/地区的Cloudflare缓存配置问题咨询
解决Cloudflare按国家/地区缓存差异化内容的方案
以下是几个经过验证的可行方案,帮你解决Cloudflare缓存导致地区内容错误的问题:
1. 自定义缓存键结合地区变量
在Cloudflare的「缓存规则」中创建自定义缓存键,将Cloudflare提供的cf-ipcountry变量(用户所在国家的两位代码,如US、CN)加入缓存键的组成中。
- 示例缓存键配置:
{uri}{query_string}{cf-ipcountry} - 原理:不同国家的用户访问同一URL时,会生成唯一的缓存键,Cloudflare会为每个地区维护独立的缓存副本。
- 前提:确保你的源站能读取Cloudflare传递的
cf-ipcountry请求头,并根据该头返回对应地区的内容(启用Cloudflare后,服务器无法直接获取用户真实IP,必须依赖这个头判断地区)。
2. 启用Cloudflare原生地域感知缓存
这是更省心的原生方案:
- 进入Cloudflare控制台的「缓存」→「缓存规则」
- 创建新规则,指定需要差异化缓存的路径(如
*example.com/*) - 在「缓存键完整性」选项中选择「包含国家/地区」
- 保存规则后,Cloudflare会自动为每个国家/地区生成独立的缓存,无需手动拼接缓存键。
3. 验证源站的地区判断逻辑
很多时候问题出在源站而非Cloudflare:
- 确认服务器能接收到
cf-ipcountry请求头,可通过在页面输出该头的值来测试 - 用
curl -H "CF-IPCountry: CN" https://你的域名模拟不同地区的请求,检查返回内容是否符合预期 - 避免依赖用户真实IP判断地区(因为Cloudflare代理后,服务器拿到的是Cloudflare的节点IP)
4. 针对动态内容排除缓存
如果部分页面是实时动态的(如用户个性化内容),可在缓存规则中设置这些路径的「缓存级别」为「不缓存」,或设置「TTL」为0,确保每次请求都回源获取正确内容。
内容的提问来源于stack exchange,提问作者Павел Иванов
相关产品推荐
相关产品推荐

