Amazon S3静态站点提供旧内容

时间:2016-09-02 06:58:27

标签: amazon-web-services amazon-s3

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

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

到目前为止,我还没有能够在SO上找到任何解决方案。注意:未启用Cloudfront。

3 个答案:

答案 0 :(得分:3)

  

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

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

这是什么意思?

如果您在s3中创建了一个新对象,则可以立即访问您的对象 - 但是,如果您对现有对象进行更新,您最终将会'从s3获取最新版本的对象,因此s3可能仍会为您提供该对象的先前版本。

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

你需要等多少钱?这取决于,亚马逊没有提供太多关于此的信息。

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

答案 1 :(得分:1)

听起来像Akshay尝试使用新文件名上传并且它有效。

我刚试过同样的问题(我遇到了同样的问题),它解决了我无法使用的文件。

  • 推送index.html
  • index.html未更新
  • mv index.html index-new.html
  • 推送new-index.htlml

此后,index-html立即可用。

那是什么样的 - 如果我想确定收件人会看到最新版本,我就无法与我的网站分享一个链接?我需要不断更改文件名并重新共享新链接。

答案 2 :(得分:1)

解决方案在这里:

但是您需要使用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将检查来源并返回更新的文件。