我通过将资产推送到AWS S3并通过CloudFront提供文件来部署单页应用程序网站。根据{{3}},我不可能在我自己的域下使用SSL直接从S3提供文件,因此如果我想以这种方式提供文件,我无法选择使用CloudFront。 / p>
当我重新部署时,我生成一个新的带时间戳的根HTML文件(它本身链接到更新的JS和CSS包),将其与其他所有内容一起推送到S3,然后将该新文件作为新的默认根对象通过AWS进行CloudFront分发。这可以防止CloudFront缓存所有内容并隐藏更新。
问题在于,CloudFront偶尔会花费很长时间来更新根对象。在我写这篇文章的时候,我每隔60秒就会点击一次刷新,等待重要的改变来达到生产。 CloudFront通过Web控制台显示正确的(最新的)根对象,但它也显示“状态:正在进行中”。
有时,这种延迟几乎不会引起注意,有时甚至很长。今天接近一个小时的延迟。
我该如何避免这种情况?我对使用S3和CloudFront的这种部署方法的两种更改持开放态度,或者切换到已知可以更好地处理此用例的替代平台。
答案 0 :(得分:0)
这就是我解决它的方法。
在云前端启用缓存值为0秒。 我也注意到提供了浏览器缓存文档。
我必须将http标头添加到S3存储桶,以便为每个不缓存的对象提供服务,
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
有关对象到期的文档:
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html
如果您将缓存设置为很长时间并且想要从CloudFront中删除缓存,则可以对根对象执行失效。
希望它有所帮助。