Varnish 是否可以根据 URL 将流量重定向到不同的 IP?
例如,以下设置是否可行(如果可行,VCL 会是什么样子):
- *.example.com 指向 Varnish IP 地址
- 当请求foo.example.com,varnish 检查缓存并将请求发送到服务器1缓存未命中时的 IP 地址。
- 当请求bar.example.com,varnish 检查缓存并将请求发送到服务器2缓存未命中时的 IP 地址。
foo 和 bar 是(大部分情况下)完全不相关的网站。它们使用引擎,但内容不同,并且拥有自己独特的数据库。由于之前这样做没有任何惩罚(除了成本),我们将它们分成两个单独的框,以便大量流量流向富不会对访客的浏览产生负面影响酒吧。
我可以设置两个 varnish 实例,让一个实例提供 foo 的静态内容,另一个提供 bar 的静态内容,但由于运行 Varnish 似乎没有太多的开销,所以我认为(也许是错误的)使用一个 Varnish 服务器在缓存未命中时将流量重定向到适当的框会更有意义。
答案1
是的。首先尝试在 default.vcl 中定义您的后端:
backend foo {
.host = "1.2.3.4"; # IP of foo backend
.port = "80";
}
backend bar {
.host = "1.2.3.6"; # IP of bar backend
.port = "80";
}
并在 vcl_recv() 代码中使用类似于:
if (req.http.host ~ "foo.example.com") {
set req.backend = foo;
}else{
set req.backend = bar;
}
有很好的文档(对于这样的例子来说已经足够好了;))http://www.varnish-cache.org/docs/2.1/您还可以使用 VCL 做更多的事情。这真的很酷。