【问题标题】:How to clear cache of static site on S3如何清除 S3 上的静态站点缓存
【发布时间】:2017-12-24 07:25:14
【问题描述】:

好的,我在 S3 上托管了一个静态站点,它实际上是一个 Angular 应用程序。我使用 gulp 模块 S3 upload 将我所有的文件上传到 S3。

我遇到的问题是文件似乎上传正常,但是当我访问该站点时,它看起来像是在提供旧版本的文件,而不是最近上传的文件。我已尝试从存储桶中删除所有文件并再次上传,但旧文件仍在网站上提供。如果我下载文件,我可以看到存储桶中的文件确实是正确的文件,但只是没有得到服务。

我没有将 Cloudfront 用于这个特定的存储桶。我需要吗?或者有没有办法清除缓存?

提前感谢您的帮助。

【问题讨论】:

  • 您的浏览器会缓存它,它不会从 S3 下载任何内容。当您从 s3 中删除文件时会发生什么,您的 Angular 应用程序是否有效?如果浏览器缓存了 JS 文件,它将起作用。虽然我没有使用 S3,但在我的 react 应用程序中,生成的 JS 文件具有随机名称,因此当浏览器下载 index.html 时,它会获取到新 JS 文件的链接并且不使用缓存的 js。
  • 当我从 S3 中删除文件时,应用程序停止工作。当我再次上传文件时,它会为旧文件提供服务,即使 js 和 css 文件上有时间戳。我也在隐身模式下使用 Chrome。然而,我注意到的是,如果我等待几分钟,部署就会出现。部署似乎需要一段时间?
  • 是的,我也看到了滞后,但那是在跨区域访问存储桶时。我将构建上传到 us-west-2 中的存储桶,我的 ec2 实例位于 us-west-1 中。我通常会等待 5-10 分钟,然后在 us-west-1 中生成 ec2,它会选择构建并运行它。这是一个演示设置。
  • 要么按照@dy10 的建议使用缓存破坏参数,要么在文件上设置正确的缓存控制标头,以便始终重新验证它们。
  • “当我从 S3 删除文件时,应用程序停止工作。当我再次上传文件时,它会为旧文件提供服务,即使 js 和 css 文件上有时间戳。 " 你知道,我敢肯定,这听起来是多么的不可能。对此最可能的解释是 S3 中的一个暂时性问题,但是当您覆盖一个对象时,您并没有真正覆盖存储中的对象,即使没有启用版本控制(您正在覆盖索引)......所以 delete = > 404 => 上传 => 获取旧对象应该几乎是不可能的。您是否通过使用curl 下载文件来交叉验证此行为?

标签: amazon-web-services caching amazon-s3


【解决方案1】:

这些都是一堆借口。这是一个缓存问题。问题是 Amazon s3 服务的界面设计不佳,因此您需要将页面“无效”,这是一个漫长的垃圾过程,与大多数只有一个简单的清除缓存按钮的竞争对手相比。亚马逊的设计非常糟糕!

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多