对CloudFront的静态内容随着时间的推移缓存错误

问题描述 投票:0回答:1

我已成立了多个S3桶之上的CloudFront的(不同地区)提供我的web应用程序的快速稳定的版本。这个Web应用程序与做出反应,这意味着它是所有一个单一的HTML文件和一个单独的JavaScript文件实施。

使用作出反应的路由机制,在URL中的所有路径,在代码中进行处理。这意味着,如果我点击喜欢www.example.com/users一个链接,也不会有向服务器发送一个请求。相反,客户端代码将呈现相应的页面,而不与服务器(我只是谈论的HTML,而不是考虑数据)进行任何协商。这意味着,如果在给定的URL一些用户类型,服务器应该返回index.html(唯一的HTML文件,我有),然后会照顾URL上的客户端。换句话说,所有发送到服务器的请求要么返回的HTML文件或我前面提到的JavaScript文件。即使是被指向没有存在的文件的请求。

为了实现这个要求,我问this question,我得到了这样的答案:

我需要建立一个错误页面,我的CloudFront的分布和重定向所有的403(禁止)请求/index.html文件。这是因为当请求指向S3上不存在的文件,S3将返回403 CloudFront的,由于缺乏上市许可。或者,我可以授予上市许可,而不是处理404错误(我没有测试这后一种选择)。

不管怎么说,我设置了,它完美的作品 - 几个小时。但后来,不知什么原因,请求JavaScript文件也返回HTML文件。当然,所有的我恢复实际上是从CloudFront的缓存,这意味着,无论多少次,我发送请求,它会回头率相同的值来。也就是说,直到我上无效的CloudFront的缓存,这将解决问题的几个小时。我们走了一圈又一圈。

虽然我不知道为什么会这样,但我的猜测是,在某些时候S3降压无法访问到CloudFront的,这将导致CloudFront的缓存index.html。我能做些什么呢?

amazon-web-services amazon-s3 amazon-cloudfront
1个回答
0
投票

我想我找到了问题:

请确认您的静态内容上的所有S3 BUCKETS是相同的!

在我的情况下,通过的WebPack是自动生成的JavaScript文件名,这意味着它是随机的。而且,由于不同区域进行“编译”分开,它们的文件名不同。

© www.soinside.com 2019 - 2024. All rights reserved.