有关如何使用相同名称在S3上维护图像并使缓存无效的最佳实践

时间:2012-05-08 07:28:09

标签: amazon-s3 http-headers amazon-web-services amazon-cloudfront

我想了解是否有关于如何在S3上维护图像以及使用cloudfront访问它们的最佳实践。我之所以提出这个问题是因为S3和cloudfront如何协同工作。

我上传了一张图片,使用S3上的元标记设置了有效期,并尝试使用我获得所需图片的云端网址。问题是当我尝试更新相同的图像时,它不会立即反映,直到met标签的设置到期为止。

如果S3有变化,有没有一种方法可以获得最新的图像?

2 个答案:

答案 0 :(得分:2)

您需要告诉CloudFront它已缓存的文件已更改,以便它将从S3获取更新版本。为此,您需要invalidate CloudFront上的文件。然后,下次请求该文件时,CloudFront将返回S3以获取最新版本。

答案 1 :(得分:2)

虽然您可以使用Cloudfront的无效功能,但我相信它会有传播延迟,因此如果您对images / css / js进行了大幅更改,则可能会出现问题。

我们经历了类似的进展,确保更改始终在进入Cloudfront之前立即传播,然后在获得Cloudfront之后再次传播。我假设很多其他人也是如此,所以对我编写的脚本的更多升级/更新,我决定让其他人使用它(more history here!)

脚本在此处托管:https://github.com/alltuition/version-tags

基本上它是一个Python OR Django脚本,它使用Linux命令和git历史记录来确定对媒体文件进行了哪些文件修改,然后使用sed更新对修改文件的不同路径的所有引用。 (文件必须从允许您使用通配符别名的服务器提供(README提供Nginx,Apache和Django dev服务器的说明。)

媒体文件的所有更改都会立即在用户的浏览器中更新,因为获得第一个修改后的html页面的第一个人请求不在Cloudfront缓存中的网址,因此Cloudfront会访问并抓取新版本的文件。这也意味着您可以将所有媒体文件设置为永不过期。