squid在max-age=0的情况下强制回源的问题
现在我们反向代理服务器准备用squid,起初设想的逻辑是这个样子的:让squid缓存源站的内容,如果源站的内容更新之后,手动调用一下脚本更新一下squid上的缓存,也就是执行类似这样一个命令:squidclient -h $squidIp -p $squidPort -m PURGE $http_url_to_refresh_cache
。但是发现当源站返回的响应头中包含cache-control:max-age=0
问题就来了,squid对于这种请求,在刷新浏览器之后强制回源了,我们本想让浏览器和squid之间进行通信,不要进行回源,但是现在却事与愿违了。本来我们是设想只在调用命令手动刷新之后,squid才(在下次重新请求时)去回源,现在倒好每次都回源了。
然后在说回来我们为什么使用max-age=0,因为如果我们不使用这个设置的话,浏览器就很有可能在下次请求的时候使用本地缓存文件,而不和squid服务器之间进行通信,这样即使我调用了PURGE
命令,浏览器依然有可能使用的是就文件。
最后说一下今天查询的关于squid的配置资料,大体上发现有配置项ignore-no-cache
可以忽略cache-control:no-cache
,配置项override-expire
可以忽略expire:xxx
,但是没有发现哪个配置项可以忽略max-age=0的这种情况。
最后说一下,为啥不采用每次更新文件都改名的方式,如果每次更新文件都改名,那么就可以将所有文件都设置一个很大的max-age值,那么就不会遇到max-age=0被强制回源的问题了。答案是之前我们用第三方的解决方案的时候,一直都是用同名文件刷新缓存的方式,当然也有更改文件路径的情况,但是那些一般用在批处理操作中,刷新同名文件一般用在js文件中。
后来找到一个解决方案,把cache-control:max-age=0
改为cache-control:no-cache
,然后在squid配置ignore-reload
,具体配置语法参见squid官网refresh_pattern的说明文档:http://www.squid-cache.org/Doc/config/refresh_pattern/。配置完成之后确实起作用了,但是最近发现这个解决方案也莫名其妙的失效了,squid的配置文件在这当中没有被修改过,squid也没有做升级,然后就不行了,这都已经黔驴技穷了,不知道该如何是好。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论