如果我定期覆盖 S3 上的文件,CloudFront 会在我在浏览器中提供它们时缓存它们。我正在研究 Invalidation 但一次验证的数量是有限制的,这对于多租户网站不起作用。
我能看到的唯一解决方案是在覆盖文件时,删除旧文件并更改新文件的名称(我只是将 TIMESTAMP 添加到末尾),这样 CloudFront 就不会提取缓存的版本。
这是处理此类事情的最建议方法吗?
如果我定期覆盖 S3 上的文件,CloudFront 会在我在浏览器中提供它们时缓存它们。我正在研究 Invalidation 但一次验证的数量是有限制的,这对于多租户网站不起作用。
我能看到的唯一解决方案是在覆盖文件时,删除旧文件并更改新文件的名称(我只是将 TIMESTAMP 添加到末尾),这样 CloudFront 就不会提取缓存的版本。
这是处理此类事情的最建议方法吗?
以下是失效限制细节的链接:http: //aws.amazon.com/cloudfront/faqs/#Is_there_a_limit_to_the_number_of_invalidation_requests
在任何给定时间,您只能处理 3 个无效请求。如果您超过此限制,则进一步的无效请求将收到错误响应,直到较早的请求之一完成。
AWS 的建议是:
建议您为文件实施版本控制系统和/或设置较短的有效期。
较短的有效期很简单,但也有明显的缺点。要实现版本控制系统,您可以跟踪数据库中的文件版本,并将版本附加为查询字符串参数:
file.jpg?v=2
这样你可以设置一个较长的有效期,只有当你专门上传新文件并更新版本时文件才会失效。
正如下面评论中所述,默认行为是 CloudFront 在构建缓存键时忽略查询字符串,因此请务必在默认缓存行为设置下启用转发查询字符串以使用此版本控制方法。