我的S3存储桶托管一个静态网站。我没有设置cloudfront。
我最近更新了S3存储桶中的文件。文件更新后,我在桶中手动确认。它仍然提供旧版本的文件。在S3上托管的静态网站上是否存在某种缓存或版本控制?
到目前为止,我还没有能够在SO上找到任何解决方案。注意:未启用Cloudfront。
答案 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
此后,index-html立即可用。
那是什么样的 - 如果我想确定收件人会看到最新版本,我就无法与我的网站分享一个链接?我需要不断更改文件名并重新共享新链接。
答案 2 :(得分:1)
解决方案在这里:
但是您需要使用CloundFront。就像@Frederic Henri所说的那样,您无法在S3存储桶本身中做很多事,但是使用CloudFront,您可以使其无效。
CloudFront会将文件在边缘位置缓存了24小时,这是默认的TTL(生存时间),并且将继续返回该文件24小时。然后,在24小时结束后,对该文件进行了请求,CloudFront将检查源,并查看文件是否已在S3存储桶中更新。如果已经更新,则CloudFront将提供该对象的新更新版本。如果尚未更新,则CloudFront将继续提供该对象的原始版本。
但是,如果您在原始位置更新文件并希望立即通过您的网站提供文件,则需要做的是CloudFront失效。无效会擦除CloudFront缓存中的文件,因此,向CloudFront发出请求时,它将看到缓存中没有文件,然后将检查来源并在来源中提供新的更新文件。建议每次在源文件中更新文件时都要执行无效操作。
要执行无效操作: