0

我通过将资产推送到AWS S3并通过CloudFront提供文件来部署单页应用程序网站。根据this answer,我不可能在自己的域下使用SSL直接从S3提供文件,所以如果我想以这种方式提供文件,我没有选择使用CloudFront的选择。AWS CloudFront根对象更新延迟

当我重新部署时,我生成一个新的有时间戳的根HTML文件(它本身链接到更新的JS和CSS包),将它与其他所有内容一起推送到S3,然后使该新文件成为新的默认根对象用于通过AWS的CloudFront分配。这可以防止CloudFront缓存所有内容并隐藏更新。

问题是,有时CloudFront需要很长时间来更新根对象。在我写这篇文章的时候,我每隔60秒就会刷新一次,等待重要的改变来实现产量。 CloudFront通过Web控制台显示正确(最新)的根对象,但它也显示“状态:进行中”。

有时,这种延迟几乎没有引人注意,而其他时间则相当长。今天它接近一个小时的延迟。

我该如何避免这种情况?我愿意对使用S3和CloudFront的这种部署方法进行更改,或者切换到已知可更好地处理此用例的替代平台。

+0

更改根对象后,在'/'上执行缓存失效。更改根对象不会删除缓存中对'/'的旧请求。 –

+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中删除缓存,则可以对根对象执行无效操作。

希望它有帮助。