2

所以这就是我想要完成的事情。我试图让清漆在共享环境中工作,我想将其设置为只有 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);
    }
}

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

4

2 回答 2

4

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

于 2012-09-26T21:58:40.873 回答
0

ghloogh 是对的,除了您可以使用 std.ip() 函数将 IP 地址转换为正确的格式以匹配 acls。但是仍然不适用于主机名。

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

sub vcl_recv {
    if (req.http.host ~ "^(domain1.com|domain2.com)$") {
        return(pass);
    }
}
于 2018-07-10T08:59:16.143 回答