我正在使用s3来托管静态网站。该网站位于s3存储桶中,由cloudfront分发。这一切都运作良好但我们在需要更改特定文件时遇到问题。如果我们在s3存储桶中更改index.html文件,我们无法从cloudfront获取最新文件。 我应该在s3上为这些静态文件设置到期时间吗?只有在过期时间后,cloudfront才会查找新版本的文件并分发新文件?
答案 0 :(得分:2)
CloudFront使用原始服务器发送的Cache-Control
和Expires
标头来决定是否将资源存储在缓存中以及将其视为新鲜的时间。如果您不通过响应标头控制缓存,CF会在从原点获取24小时后将每个资源视为过时。 (可选)您可以配置分发以忽略缓存控制标头,并为您指定的每个资源使用到期时间。
当您更新原始文件时,CF将不会尝试刷新其副本,直到它过期。您可以按照不同的策略来更新CF更新缓存副本。
1)效率最低而不推荐使用invalidation。您可以通过AWS控制台或API来完成。
2)通过发送Expires
标题告诉CF何时查找更新的内容。例如,如果您有一个严格的策略来部署新的内容/版本到您的网站,并且您知道您说几乎每周四推出部署,您可以发送一个Expires
标头,其中包含来自您的原始设置的每个资源下一个计划部署日期。 (这可能不适用于S3起源。)
3)最有效和推荐的方法是使用versioned URLs。一个好的做法可能是将资源的最后修改时间包括在其访问URI中。使用EC2或其他能够提供动态内容的来源相当容易,如果可能的话,使用S3来源并不是那么直接。
因此我建议使更新的资源无效。
答案 1 :(得分:2)
看起来您必须在s3端设置元数据:
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
我发现这样做的最好方法是使用BucketExplorer并进行“批量操作”,“更新元数据”,“添加元数据”,然后添加“Cache-Control:max-age = 604800,public”1周缓存期。