2014-01-29 140 views
0

我使用S3来存储一堆图像和CloudFront来缓存它们。我得到的问题是我的图像没有正确缓存。如何正确设置Amazon CloudFront缓存

如果我通过CloudFront链接检查图像的标题,它将在第一次尝试中显示MISS,并在所有后续尝试中显示HIT。这很正常,但如果我关闭浏览器,请离开几个小时再试一次,它会显示一个MISS。因此表明它只能在短时间内缓存。

下面是对CDN的样本图像:http://d711ds9nsj32q.cloudfront.net/static/8e1f8567e229e24e0782ed_1e994b9dc56ba092ecd2_5.jpg

一个奇怪的现象是,如果你试图用web-sniffer.net嗅出头,你会看到一个MISS每一次。尽管缓存控制是public, max-age=315360000,并且它将在10年后过期。

在cloudfront上缓存10年的正确方法是什么?是否有任何额外的标题我错过了?

编辑:这里的对比是the same image imgur。他们使用cloudflare,但我看到的行为是正确的。一旦缓存,我再也不会从我的任何电脑或附近的地点再次发现任何错过。除了一些(不重要的)区别之外,我的标题和他们的标题都是相似的。任何帮助表示赞赏。

回答

1

这可能是因为您的TTL最小值设置为非默认值,并且它将缓存该时间段而不是缓存控制标头中的内容。我认为这不太可能,因为你可能已经想到了它,并且因为它看起来分配方面是Cache-Control:no-cache(并且如果最小TTL是非默认的,它不会)。

更可能的是,CloudFront的只是赶走你的项目了一段时间后:

如果在边缘位置的对象不频繁请求, CloudFront的可能驱逐其 到期前的对象删除对象日期 - 为更受欢迎的物体腾出空间。

- 从this article

至于web-sniffer.net,你会发现,它会发送的Cache-Control:no-cache标题,这将使CloudFront的从源头获取。

+0

感谢您的帮助。我不认为驱逐正在发生,因为我正在测试相对较新的文件。看起来CF在做这样的事情之前至少要等一段时间(几个月?)。 **另外**:如果你尝试[这个来自Squre的图像](https://dl6rt3mwcjzxg.cloudfront.net/assets/redesign/home/hero.large-2df3c88fdbe4801dcd2704ccb1fcc162.jpg)在web-sniffer上,你会发现它是每次HIT。似乎我的标题和他们的标题是相似的,并且都在CloudFront上。 – steve

+0

你说得对,我正在通过cf提供的自己的文件上尝试它,并注册了一个命中。你能发布源对象的URL吗? –

+0

Alex,这里是[source url](http://flexurl.com/rtlu)。如果你需要,我可以给你更多的信息。当我上传文件时,我将“Cache-Control”和“Expires”设置为10年。谢谢。 – steve