所以这就是我想要实现的目标。我试图让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);
}
}
但我真的很喜欢第一个干净的外观。有什么想法吗?
答案 0 :(得分:4)
不幸的是,我们不能将ACL用于HTTP主机头。它仅用于匹配客户端地址
答案 1 :(得分:0)
ghloogh是正确的,除了可以使用std.ip()函数将IP地址转换为正确格式以与ACL匹配。主机名仍然无法使用。
但是我建议您使用正则表达式而不是单个字符串匹配,例如:
sub vcl_recv {
if (req.http.host ~ "^(domain1.com|domain2.com)$") {
return(pass);
}
}