【问题标题】:Cloudfront TTL settings: What happens with minimum TTL 0 when S3 object is updatedCloudfront TTL 设置:更新 S3 对象时最小 TTL 0 会发生什么
【发布时间】:2017-09-23 04:45:12
【问题描述】:

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

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

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

我假设 0 分钟 ttl,它会识别它已经更新,但我找不到任何说明这一点的文档。

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

【问题讨论】:

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


    【解决方案1】:

    最小 TTL 与你想象的不同。

    如果从源获取的对象具有 Cache-Control: max-age=n 标头,其中 n < minimum-ttl,则 CloudFront 将忽略 max-age=n,而是将对象缓存到 minimum-ttl。将 minimum-ttl 设置为 0 本质上等同于使 minimum-ttl 永远不适用(直到发明时间旅行),因为没有任何对象的声明的 max-age 小于 0。

    Maximum TTL是一样的,另一方面,如果n > maximum-ttl,那么CloudFront会缓存对象不超过maximum-ttl。

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

    在任何情况下,CloudFront 都不会在其 TTL 到期之前再次检查源以查找已缓存对象的新版本。它没有收到来自 S3 的更改对象的通知。您可以通过检查 Age: 响应标头来判断对象在特定边缘缓存中的停留时间。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 2012-05-24
      • 1970-01-01
      • 2021-08-22
      • 2015-02-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多