Varnish 针对不同的服务器使用不同的 req.http.host 进行轮询

Varnish 针对不同的服务器使用不同的 req.http.host 进行轮询

我有一个带有 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 这个名字?

相关内容