我在多个 Web 服务器前面安装了 Varnish,我可以将它们作为 varnish 的本机运行,也可以通过 nginx 的上游检查运行,但只有静态内容会被缓存(这并不奇怪),同时也尊重查询字符串,即
/main.css?v=1
并/main.css?=v2
单独缓存
我逐个更新服务器,事实上,所有这些都不可能在没有停机的情况下同时完成,这是一般的部署事情。
如果main.css
更新于一后端,我根据新的网页版本向 varnish 发送请求,并发出请求/main.css?=v2
,它可能仍在具有旧版本且尚未更新的机器上寻找文件main.css
,所以,现在我在缓存中将 v1 作为 v2 获得,并且我无能为力,除非 TTL 过期(太晚了)。
我可以通过请求手动使缓存无效,没关系。
是否有任何自动化解决方案,无需人工干预重写软件以获取对 varnish 的反馈?例如:
- 探测成功后,后端启动时缓存是否可能过期?
- 还要别的吗?
谢谢
答案1
如果您加载此代码或针对您的 varnish 版本进行调整,则可以发送 PURGE 类型的请求,请求 URL 与您要清除的内容相匹配,以从 varnish 缓存中清除该项目。您可以使用此功能在部署过程结束时通过 cURL 命令或类似命令自动选择性清除您的 Varnish 服务器。
https://github.com/dreamhost/varnish-vcl-collection/blob/master/lib/purge.vcl