我有一个带有 2 个后端 www 服务器的 varnish4 设置。我想以 rr 方式在它们之间实现负载平衡,但要为适当的服务器设置适当的虚拟主机。
sub vcl_init {
new vdir = directors.round_robin();
vdir.add_backend(www1);
vdir.add_backend(www2);
}
sub vcl_recv {
if (req.http.host ~ "^(www\.)?site1\.company\.com$") {
set req.http.host = "site1.webserver1.lan.company.com";
set req.backend_hint = vdir.backend();
}
...
现在的问题是,webserver2 需要 req.http.host =“site1.webserver2.lan.company.com”;因此当轮到它时它将无法运行。
有人知道怎么做吗?无法在直接服务器(www1、www2)声明中设置此项,只能在那里设置心跳检查参数。
谢谢
答案1
简短的回答是,你不能,因为导演选择的后端在任何阶段都不会向你公开,无论是哪种默认导演。
无论如何,您为什么要重写主机头,您当然可以将后端服务器配置为服务于“www.)?site1.company.com”,它们不需要关心是否为其特定后端主机名“site1.webserver1.lan.company.com”获取流量,他们只关心 site1.company.com 这个名字?