如何解决清漆4.1 VCL中工作OR运算符的示例
在其中带有ACL的清漆配置上进行工作,其中一部分引用ipv4通配符以确保匹配的ip格式正确。但是,这似乎剥夺了任何ipv6地址,因此我们不能基于ipv6列入白名单。
根据清漆文档,“ ||”运算符应作为逻辑或,因此我应该能够允许为ipv6通配符匹配0.0.0.0 OR ::的内容。但是,如果我使用||操作符,清漆不会重新启动,并且清漆状态专门标记了||。运营商作为问题。
Aug 26 10:40:47 server17 varnishd[14748]: ('/etc/varnish/default.vcl' Line 163 Pos 74)
Aug 26 10:40:47 server17 varnishd[14748]: if ((std.ip(req.http.X-Actual-IP,"0.0.0.0") !~ admin) && req.url ~ "^/") || if ((std.ip(req.http.X-Actu... "^/") {
Aug 26 10:40:47 server17 varnishd[14748]: -------------------------------------------------------------------------##----------------------------...---------
Aug 26 10:40:47 server17 varnishd[14748]: Running VCC-compiler failed,exited with 2
这只是我尝试使用OR运算符进行的一种最新安排,但是无论它是否包含在原始查询的括号内,错误始终会突出显示该运算符
在清漆文档中的任何地方都没有给出使用中逻辑或的实际示例,因此我不确定在这里我是如何不正确地使用它。它刚刚被弃用了吗?
解决方法
我试图在某种程度上复制您的用例,但是以下有关VCL片段的最重要部分是使用||
运算符的事实。
在此示例中,匹配了 acl ,而使用 or子句完成了其他一些匹配。
vcl 4.1;
import std;
acl acl {
"172.21.0.1";
}
sub vcl_recv {
set req.http.x-ip = std.ip(client.ip,"0.0.0.0");
if ( std.ip(client.ip,"0.0.0.0") !~ acl || req.http.x-ip == "0.0.0.0" || req.http.x-ip == "::") {
return(synth(403,"Forbidden for " + req.http.x-ip));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。