如何返回(传递)所有不在acl中的主机 - Varnish

时间:2012-09-25 22:20:19

标签: caching varnish varnish-vcl

所以这就是我想要实现的目标。我试图让varnish在共享环境中工作,我想将它设置为只有vcl中的域包含缓存而其余的只是传递。以下是我要看的内容:

include "/etc/varnish/whitelist.vcl";
if (req.http.host !~ vhosts) {
   return(pass);
}


acl vhosts {
"domain.net";
"www.domain.net";
"...";
}

...

现在清漆告诉我这不可能:

Message from VCC-compiler:
Expected CSTR got 'vhosts'
(program line 940), at
('input' Line 11 Pos 30)
if (req.http.host !~ vhosts) {
-----------------------------######---

Running VCC-compiler failed, exit 1

VCL compilation failed

现在我知道我可以做以下事情:

sub vcl_recv {
    if (req.http.host == "domain1.com" || 
        req.http.host == "domain2.com") {
        return(pass);
    }
}

但我真的很喜欢第一个干净的外观。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

不幸的是,我们不能将ACL用于HTTP主机头。它仅用于匹配客户端地址

答案 1 :(得分:0)

ghloogh是正确的,除了可以使用std.ip()函数将IP地址转换为正确格式以与ACL匹配。主机名仍然无法使用。

但是我建议您使用正则表达式而不是单个字符串匹配,例如:

sub vcl_recv {
    if (req.http.host ~ "^(domain1.com|domain2.com)$") {
        return(pass);
    }
}