6

我有通过 Amazon Cloudfront 提供的 JS 和 CSS 文件。到目前为止,我一直在使用我自己的服务器运行 Varnish,当我更新任何 JS 或 CSS 文件或使用新版本时,我必须在请求该文件的 URL 参数上增加一个计数器。

因此,被包含文件的 URL 将从 .../file.css?r=1 变为 .../file.css?r=2 并且 Varnish 会将其视为一个新文件,请求并缓存它并从那时起从缓存中提供它。

使用 Cloudfront,我意识到它不是那样工作的,它仍然提供旧的缓存文件(并且我在 HTTP 响应中不断收到“来自 Cloudfront 的命中”)。

知道我是否可以为此改变 Cloudfront 的行为吗?

我能做的任何其他事情并不意味着每次更新文件时实际上都会更改文件的名称?我也不想通过 Cloudfront 的 API 使用缓存失效。我认为这对于我在这里尝试做的事情来说太多了,而且我每个月可以提出的(免费)请求数量有限。

4

3 回答 3

4

看起来您提前了一个月左右……2012 年 5 月中旬,亚马逊宣布您可以开始使用查询字符串来识别云前端缓存中的对象。

这是他们博客上公告的链接:http: //aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html

不幸的是,我在我的快速谷歌搜索中没有看到任何描述你如何做到这一点的链接,但我确信它隐藏在他们的文档或控制面板的某个地方。

希望这能让你朝着正确的方向前进。

于 2012-07-10T21:52:29.770 回答
1

不幸的是,如果您想避免重命名文件,通过 CloudFront 的 API 失效似乎是目前唯一可用的选项。但是,通过自动化部署过程可以最大程度地减少重命名文件的痛苦。

于 2012-04-19T22:49:05.177 回答
-2

简短的回答,不。CDN 应该用于不经常更改的静态资产。

从他们的文档中

当 CloudFront 从源服务器请求对象时,它会删除所有查询字符串参数。

确保您的服务器设置为正确传递Expires标头和/或Cache-Control: max-age标头。我们目前使用 max-age=1800

于 2012-04-19T23:21:03.703 回答