在多个服务器前使用 Varnish 进行版本控制

在多个服务器前使用 Varnish 进行版本控制

我在多个 Web 服务器前面安装了 Varnish,我可以将它们作为 varnish 的本机运行,也可以通过 nginx 的上游检查运行,但只有静态内容会被缓存(这并不奇怪),同时也尊重查询字符串,即

/main.css?v=1/main.css?=v2单独缓存

我逐个更新服务器,事实上,所有这些都不可能在没有停机的情况下同时完成,这是一般的部署事情。

如果main.css更新于后端,我根据新的网页版本向 varnish 发送请求,并发出请求/main.css?=v2,它可能仍在具有旧版本且尚未更新的机器上寻找文件main.css,所以,现在我在缓存中将 v1 作为 v2 获得,并且我无能为力,除非 TTL 过期(太晚了)。

我可以通过请求手动使缓存无效,没关系。

是否有任何自动化解决方案,无需人工干预重写软件以获取对 varnish 的反馈?例如:

  1. 探测成功后,后端启动时缓存是否可能过期?
  2. 还要别的吗?

谢谢

答案1

如果您加载此代码或针对您的 varnish 版本进行调整,则可以发送 PURGE 类型的请求,请求 URL 与您要清除的内容相匹配,以从 varnish 缓存中清除该项目。您可以使用此功能在部署过程结束时通过 cURL 命令或类似命令自动选择性清除您的 Varnish 服务器。

https://github.com/dreamhost/varnish-vcl-collection/blob/master/lib/purge.vcl

相关内容