我似乎无法看到文档中一个明显的答案。
当我更新S3文件,我启用了CloudFront的,并S3发送无效信号到CloudFront的? 或者我需要对自己在更新文件后,将其发送?
我似乎无法看到文档中一个明显的答案。
当我更新S3文件,我启用了CloudFront的,并S3发送无效信号到CloudFront的? 或者我需要对自己在更新文件后,将其发送?
S3没有任何失效信息发送到CloudFront的。 默认情况下,将CloudFront的撑起来通过设定当它从原点检索到的数据(也可以将其从缓存中较早的项目,如果它感觉就像是)缓存控制标题中所指定的最大时间信息。
您可以通过创建一个无效批次无效缓存条目。 这将花费你的钱:每月1日1000个请求是免费的,但除此之外,它的成本$ 0.005每个请求 - 如果你是无效1000个文件,每天会花费您$ 150个月(除非你可以使用通配符功能)。 当然,你可以在响应使用亚马逊LAMBDA功能的S3事件触发此。
另一种方法是,当对象改变(实际上世代缓存键)来使用不同的路径。 同样,你可以添加的查询参数的URL,当你想CloudFront的获取一个新的副本更改查询参数(要做到这一点,你需要告诉CloudFront的使用查询字符串参数 - 默认情况下它忽略它们)。
如果你只做罕见的(但大)变化的另一种方法是简单地创建一个新的CloudFront的分布。
据我所知,所有的CDN这样的工作。
这就是为什么你通常使用类似foo-xyzext
到版本资产在CDN。 我不会用foo.ext?xyz
,因为有一些关于某些浏览器和代理缓存从未资产用?QUERY_STRING
。
一般来说,你可能要检查了这一点: https://developers.google.com/speed/docs/best-practices/caching
它包含了大量的最佳实践和进入细节做什么,它是如何工作。
至于S3和的Cloudfront,我不是超级熟悉的缓存失效,但什么弗雷德里克祥提的是正确的。
一些供应商还允许您直接清除缓存却因为CDN的性质这些变化几乎从来没有瞬间。 另一种方法是设置一个较小的TTL(过期头),所以资产将更频繁地刷新。 但我认为,连败CDN的目的也是如此。
在我们的例子(Edgecast),缓存失效是可能的(一个手动过程)和免费的,但我们很少这样做,因为我们的版本相应的我们的资产。