我有一个域static.example.com
。该域下的所有资源都是一次写入,多次读取。我希望Cloudflare尽可能积极地缓存其资源;如果资源在服务器上发生变化,客户端应该能够获取更新版本的唯一方法是,如果我手动进入Cloudflare并清除该资源的缓存。
现在,我明白这是不可能的。我可以做的第二件事就是在服务器上实现这一点(不使用客户端缓存,例如使用Cache-Control
标头)将边缘缓存TTL设置为尽可能高。
我在Cloudflare中配置了一个页面规则,如下所示:
*static.example.com/*
Cache Level: Cache Everything, Edge Cache TTL: a month
然而,Cloudflare似乎并不尊重一个月的边缘缓存TTL。
GET https://static.example.com/img.png
。响应标头cf-cache-status: MISS
。加载速度很慢,因为它会转到我的原始服务器。GET https://static.example.com/img.png
。响应标头cf-cache-status: HIT
。负载很快,因为它由Cloudflare缓存。static.example.com
提出任何其他请求。GET https://static.example.com/img.png
。 响应标头cf-cache-status: MISS
。负载很慢! (为什么不尊重一个月的边缘缓存TTL?资源不应该从Cloudflare缓存中清除!) GET https://static.example.com/img.png
。响应标头cf-cache-status: MISS
。加载速度很慢,因为它会转到我的原始服务器。GET https://static.example.com/img.png
。响应标头cf-cache-status: HIT
。负载很快,因为它由Cloudflare缓存。static.example.com
提出任何其他请求。GET https://static.example.com/img.png
。 响应标头cf-cache-status: HIT
。负载很快。 为什么我设置的边缘缓存TTL值不受Cloudflare代理服务器的尊重?
答案 0 :(得分:0)
它只是一个缓存。到期只是建议何时明确到期,但与所有缓存一样 - 您不能信任任何缓存 - 或者在整个期间缓存。该项最有可能从其最近使用的逻辑缓存中过期,任何流行的内容都会将您的图像从缓存中推出。如果您想要保证CDN上的元素,您不应该像Cloudflare那样使用基于代理的CDN。