Cloudfront TTL设置:更新S3对象时,最小TTL 0会发生什么

时间:2017-04-26 00:29:00

标签: amazon-web-services amazon-s3 cdn amazon-cloudfront

如果我有一个自定义对象缓存Cloudfront的TTL设置(连接到S3存储桶),其中:

Min TTL: 0
Max TTL: 1 year
Default TTL: 1 week

我的问题是: 如果我在S3中更新对象,Cloudfront会立即提供新对象(假设它先前已存储在缓存中),还是会根据默认TTL继续提供缓存项长达1周?

我假设0分钟ttl,它会认识到它已被更新,但我找不到任何明确的文档。

第二个问题: 由于这是一个自定义TTL,并且min为0,这是否意味着该对象实际上永远不会被缓存? (在这种情况下,我们只是忽略默认值和最大值吗?)

1 个答案:

答案 0 :(得分:1)

最小TTL与您想象的不同。

如果从原点获取的对象的Cache-Control: max-age=n标题位于n < minimum-ttl,则CloudFront将忽略max-age=n,而是将对象缓存至最小ttl。设置为0的minimum-ttl基本上等于使minimum-ttl永远不适用(直到时间旅行发明),因为没有对象可以使声明的max-age小于0。

最大TTL是相同的,另一方面,如果n > maximum-ttl,则CloudFront将对象缓存不超过maximum-ttl。

如果没有Cache-Control: max-age=n,CloudFront会将对象缓存不超过default-ttl。

无论如何,在TTL过期之前,CloudFront不会再检查原始版本的已缓存对象的新版本。它没有从S3获得更改对象的通知。您可以通过检查Age:响应标头来判断对象在特定边缘缓存中的持续时间。

如果您需要提前驱逐对象,请使用缓存失效。失效匹配任何与指定模式匹配的对象(例如/images/*驱逐与该路径匹配的任何对象),失效只是告诉所有CloudFront边缘缓存“如果”它们在驱逐之前缓存了任何匹配的对象,必须将这些视为无效,不再用于处理请求。无论是否找到与模式匹配的缓存对象,失效都会成功。它没有告诉你它被驱逐的原因 - 大概是 - 它不会立即清除它们,它只是设置标记来防止使用旧的匹配缓存条目(强制在下一个请求上重新获取)并且实际上稍后在后台查找并清除它们。您每月免费获得1,000个无效请求,其中1个无效请求可以包含通配符并驱逐数百万个对象,但这仍然只计为1个无效。