我想为 Cristian Vidmar 和 msurovcak 的帖子添加更多细节
“(req.http.host == "example1.com")”模式:
我们使用所描述的模式在每台服务器上托管数十到数百个站点。
您可以使用
在整个配置(vcl_fetch/vcl_backend_response、vcl_hash 等)中继续使用特定于站点的自定义规则
if (req.http.host == "example1.com") {
需要的例子。
将此与模板引擎相结合,以允许通过包含其自己的逻辑的单个文件管理客户特定的配置(所有文件都包含在其站点特定的 if 块中以隔离代码)。
然后您将每个单独的站点块包含到 default.vcl 中,使用:
include "/etc/varnish/www.example1.com.vcl";
完全拆分后端的可选增强功能:
如果您托管完全不同的网站,那么拆分后端(和拆分缓存)是一个不错的选择。
如果站点相似(相同的代码库/js/css/图像),运行资源域可能会很有趣,例如。所有网站都使用的 resources.example.com。
然后,您可以在多个网站的每个公共元素上拥有一个缓存(并且命中率非常高),并且仍然在各个 www 网站上保持差异。
使用拆分后端的另一种替代方法:
另一种选择是通过容器拆分 Varnish 实例。然后每一个都成为它自己的孤立世界,单独管理(生死)。这可能是一个很好的安全选择,并且在现代基础架构上,多个进程的开销最小。
这样做的一些优点是您可以支持不同版本的 Varnish 以及每个实例的不同 Varnish 启动参数。
这对于单独的日志记录非常有用,可以利用每个实例的不同 ESI 模式和单独的内存/调整配置设置。
我们在www.section.io 这样做,它还使我们能够在不同的地理位置运行不同的容器或在不同的位置运行相同的容器,以尽可能接近地理上分散的用户群。