【发布时间】:2020-12-05 18:08:07
【问题描述】:
我的 S3 存储桶托管一个静态网站。我没有设置云端。
我最近更新了我的 S3 存储桶中的文件。文件更新后,我在存储桶中手动确认。它仍然提供旧版本的文件。在 S3 上托管的静态网站上是否会发生某种缓存或版本控制?
到目前为止,我还没有找到任何关于 SO 的解决方案。注意:Cloudfront 未启用。
【问题讨论】:
标签: amazon-web-services amazon-s3
我的 S3 存储桶托管一个静态网站。我没有设置云端。
我最近更新了我的 S3 存储桶中的文件。文件更新后,我在存储桶中手动确认。它仍然提供旧版本的文件。在 S3 上托管的静态网站上是否会发生某种缓存或版本控制?
到目前为止,我还没有找到任何关于 SO 的解决方案。注意:Cloudfront 未启用。
【问题讨论】:
标签: amazon-web-services amazon-s3
在托管在 S3 上的静态网站上是否会发生某种缓存或版本控制?
Amazon S3 存储桶为新对象的 PUTS 提供写后读一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性
这是什么意思?
如果您在 s3 中创建一个新对象,您将能够立即访问您的对象 - 但是,如果您更新现有对象,您将“最终”从 s3 中获取最新版本的对象,所以s3 可能仍会为您提供以前版本的对象。
我相信从前一段时间开始,在美国标准区域也可以更新写后读一致性。
你需要等多久?好吧,这取决于亚马逊并没有提供太多这方面的信息。
你能做什么?不多。如果您想确保您的 S3 存储桶传递文件没有任何问题,请在您的存储桶中上传一个新文件,您将能够立即访问它
【讨论】:
解决方案在这里:
但您需要使用 CloundFront。就像@Frederic Henri 所说,您不能在 S3 存储桶本身中做太多事情,但使用 CloudFront,您可以使其无效。
CloudFront 将在边缘位置缓存该文件 24 小时,这是默认的 TTL(生存时间),并将继续返回该文件 24 小时。然后在 24 小时结束后,对该文件发出请求,CloudFront 将检查源并查看文件是否已在 S3 存储桶中更新。如果已更新,则 CloudFront 将提供对象的新更新版本。如果尚未更新,则 CloudFront 将继续提供对象的原始版本。
但是,如果您更新源中的文件并希望通过您的网站立即提供该文件,那么需要做的是 CloudFront 失效。失效会从 CloudFront 缓存中擦除文件,因此当向 CloudFront 发出请求时,它将看到缓存中没有文件,然后将检查源并在源中提供新的更新文件。建议每次在源中更新文件时运行失效。
运行失效:
【讨论】:
听起来 Akshay 尝试使用新文件名上传并且成功了。
我只是尝试了相同的方法(我遇到了同样的问题),它解决了该文件对我不可用的问题。
index.html
index.html未更新mv index.html index-new.html在此之后,index-html 立即可用。
这有点糟糕 - 如果我想确保收件人会看到最新版本,我不能分享一个指向我网站的链接?我需要不断更改文件名并重新共享新链接。
【讨论】: