我通过Amazon Cloudfront提供JS和CSS文件。到目前为止,我正在使用我自己的运行Varnish的服务器,当我更新任何JS或CSS文件时,或者我必须要使用的新版本是为了在该文件的请求上增加URL参数的计数器。
所以包含的文件的URL会从... / file.css?r = 1转到... / file.css?r = 2而Varnish会将其视为新文件,请求它并缓存它并从那时起从缓存中提供它。
使用Cloudfront我意识到它不能像那样工作,它仍然提供旧的缓存文件(并且我不断在HTTP响应中获得“来自Cloudfront”)。
我是否可以为此更改Cloudfront的行为?
我能做的其他事情并不意味着每次更新文件时实际更改文件的名称?我也不想通过Cloudfront的API使用缓存失效。我认为这对我在这里所做的工作来说太过分了,每月我可以提出的(免费)请求数量有限。
答案 0 :(得分:3)
看起来你太早了一个月......在2012年5月中旬,亚马逊宣布你可以开始使用查询字符串来识别云端缓存中的对象。
以下是他们博客上公告的链接:http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html
不幸的是,我在我的快速谷歌搜索中没有看到任何描述你究竟能做到这一点的链接,但我确信它已经被隐藏在他们的文档或控制面板中。
希望这能让你朝着正确的方向前进。
答案 1 :(得分:1)
不幸的是,如果您想避免重命名文件,那么通过CloudFront API的失效似乎是目前唯一可用的选项。但是,通过自动化部署过程可以最大限度地减少重命名文件的痛苦。
答案 2 :(得分:0)
简短的回答,没有。 CDN应该用于不经常更改的静态资产。
来自docs:
当CloudFront从源服务器请求对象时,它会删除所有查询字符串参数。
确保您的服务器已设置为正确传递Expires
标头和/或Cache-Control: max-age
标头。我们目前使用max-age = 1800