使用Varnish与多个名为vhosts的apache

时间:2014-06-15 13:38:42

标签: apache varnish varnish-vcl

我为具有大量(1000+)命名虚拟主机(在Apache上)的服务器实现Varnish(4.0),其中大多数指向相同的IP和Web。我让Varnish工作正常:

backend default {
  .host = "127.0.0.1";
  .port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^www.domain1.de(:[0-9]+)?$") {
    set req.http.host = "www.domain1.de";
 } else if (req.http.host ~ "^www.domain2.de(:[0-9]+)?$") {
    set req.http.host = "www.domain2.de";
 }
 ....
 ....
 set req.backend_hint = default;
}

但是,要为1000多个域执行此操作似乎有点奇怪。我不需要为网站提供任何特殊配置,它们具有相同的后端。

如果我没有添加任何特定配置,我只能访问标准网站(无论我输入什么域名)。

有关如何解决这个问题的任何提示? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果您希望删除端口名称,或者需要对req.http.host进行一般性更改,可以使用清漆VCL中的regsub()方法:

set req.http.host = regsub(req.http.host , "(.*)(:[0-9]+|)" , "\1" );

此示例删除端口号(如果存在) 请根据您的需要设置正则表达式,因为您的问题并未真正说明您要实现的目标。

请注意,您可以通过\N 而非 调用替换字符串作为$1,因为某些man页面建议。 (已经提交了一个bug来解决这个问题。)

最后一个漂亮的Varnish regexp作弊表:
http://kly.no/varnish/regex.txt