我为具有大量(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多个域执行此操作似乎有点奇怪。我不需要为网站提供任何特殊配置,它们具有相同的后端。
如果我没有添加任何特定配置,我只能访问标准网站(无论我输入什么域名)。
有关如何解决这个问题的任何提示? 谢谢!
答案 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