Amazon S3 静态站点提供旧内容

Aks*_*pal 5 amazon-s3 amazon-web-services

我的 S3 存储桶托管一个静态网站。我没有设置 cloudfront。

我最近更新了 S3 存储桶中的文件。当文件得到更新时,我在存储桶中手动确认。它仍然提供旧版本的文件。在 S3 上托管的静态网站上是否存在某种缓存或版本控制?

到目前为止,我无法在 SO 上找到任何解决方案。注意:未启用 Cloudfront。

Yud*_*udi 11

解决方案在这里:

但你需要使用CloundFront。就像 @Frederic Henri 所说,您不能在 S3 存储桶本身中做太多事情,但是使用 CloudFront,您可以使其无效。

CloudFront 会在边缘站点上缓存该文件 24 小时,这是默认的 TTL(生存时间),并将继续返回该文件 24 小时。然后,24 小时结束后,如果对该文件发出请求,CloudFront 将检查源并查看该文件是否已在 S3 存储桶中更新。如果已更新,CloudFront 将提供该对象的新更新版本。如果尚未更新,则 CloudFront 将继续提供对象的原始版本。

但是,如果您在源中更新文件并希望立即通过您的网站提供该文件,则需要做的是 CloudFront 失效。失效会擦除 CloudFront 缓存中的文件,因此当向 CloudFront 发出请求时,它将发现缓存中没有文件,然后检查源并在源中提供新的更新文件。建议每次在源中更新文件时运行失效。

要运行失效:

  • 单击 CloudFront 控制台的以下链接 - https://console.aws.amazon.com/cloudfront/home?region=eu-west-1#
  • 打开有问题的发行版
  • 单击所有选项卡右侧的“无效”选项卡
  • 点击“创建失效”
  • 在弹出窗口中,它会询问路径。您可以输入 /* 以使缓存中的每个对象失效,或输入文件的确切路径,例如 /images/picture.jpg
  • 最后点击“无效”
  • 这通常会在 2/3 分钟内完成
  • 然后,一旦失效完成,当您通过 CloudFront 再次请求该对象时,CloudFront 将检查源并返回更新的文件。


Fré*_*nri 6

在 S3 上托管的静态网站上是否存在某种缓存或版本控制?

Amazon S3 存储桶为新对象的 PUTS 提供先写后读一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性

这是什么意思 ?

如果您在 s3 中创建一个新对象,您将能够立即访问您的对象 - 但是,如果您更新现有对象,您将“最终”从 s3 获得最新版本的对象,因此 s3 可能仍然为您提供对象的先前版本。

相信从前段时间开始,写后读一致性也可以在美国标准区域进行更新。

你需要等多久?好吧,这取决于,亚马逊没有提供太多相关信息。

你可以做什么 ?不多。如果您想确保您的 S3 存储桶传送文件没有任何问题,请在您的存储桶中上传一个新文件,您将能够立即访问它

  • @MarkB 这就是我首先想到的,但操作特别提到了 S3 端的缓存,我希望“清除缓存”已完成 (2认同)