AWS CloudFront缓存问题

时间:2019-01-21 04:22:01

标签: reactjs amazon-web-services caching amazon-cloudfront

我正在使用链接到S3存储桶的AWS CloudFront托管一个静态(反应)网站。除了我将已更改的文件上传到存储桶之外,其他一切似乎都正常。我知道CloudFront会设计缓存文件,并且您必须使更改的文件无效,以便CloudFront尽快获取新的更改。但是,每当我浏览网站(在不同设备上)时,我仍然会获得文件的旧版本。有时,我会看到网页的最新版本,但是后来当我浏览到同一页面时,它得到的是旧版本(即使在清除缓存或在隐身模式下浏览之后)?很奇怪。

我对自己的设置有疑问:

  • 我正在使用S3终结点主机名从CloudFront链接到S3,而不仅仅是从列表中选择存储桶,因为我发现AWS将我的网站误解为REST服务(期望XML),并且发现了{ 3}}。可以这样做吗,并且会引起奇怪的缓存问题吗?
  • 我正在使用/ *使文件无效。我无法确认这是否有效,因为CloudFront不会详细说明哪些文件已失效。 / *会使存储桶中的所有子文件夹无效,还是仅使根目录中的文件无效?
  • 在所有文件上添加缓存控制值会影响无效吗?
  • 从CloudFront进行记录是否可以帮助我识别我所遇到的奇怪问题?

由于我是AWS的新手,因此希望对此提供一些反馈,并且有太多可配置的元素,有时确实令人生畏!

谢谢

2 个答案:

答案 0 :(得分:2)

  

在所有文件上添加缓存控制值会影响无效吗?

是的,那是你的问题。

如果您要在文件上添加缓存控制,它们将被缓存在客户端(浏览器)上,并且Cloudfront中的无效操作不会将这些文件从客户端的缓存中删除。

您有几种选择:

  • 不添加文件缓存控制(错误-减慢页面加载时间)
  • 将文件的缓存控制设置为较短的时间跨度(无错误-缓存过期后减慢页面加载时间)
  • 清除网站的浏览器缓存(不大,您的用户可能仍会看到旧内容)
  • 完全禁用浏览器的缓存(效果不佳-几乎降低了每个网站的速度)
  • 将单页React拖放到服务器端渲染(SSR)React应用程序(最佳实践,但很多工作。虽然很值得)

答案 1 :(得分:0)

是的,缓存确实可以杀死人,但是在AWS中,您有解决方案。...

1. AWS Cloud front
2. In that Click the ID you want
3. You can able to see the Invalidations tab, click that
4. Then Create Invalidation
5. Enter -> /*   and click Invalidate 

无效后,您可以查看最新更改