KM.*_*KM. 3 varnish load-balancing access-control-list
在以下设置中:
Client -> LB -> Varnish
Run Code Online (Sandbox Code Playgroud)
我想配置 Varnish acls 以根据客户端的 IP 执行某些操作。LB 在一个名为“ClientIP”的变量中发送客户端的 IP,Varnish 可以通过它读取req.httpd.ClientIP.
我试过这个:
acl admin_net {
"10.10.1.160"/27;
}
sub vcl_deliever {
if (req.http.ClientIP ~ admin_net) {
// do something ...
}
}
Run Code Online (Sandbox Code Playgroud)
但是 VCL 编译失败并显示“预期的 CSTR 得到了‘admin_net’”(C 字符串?)。我可以通过 解决这个问题req.http.ClientIP ~ "10.10.1.*")
,但我必须注释掉 ACL 行。
有没有另一种方法可以让这个与 ACL 一起工作?我也看了看client.ip
,这是一个只读变量。在上面的设置中,它包含 LB 的 IP 而不是客户端的 IP。
这可以使用std.ip完成,假设 ClientIP 标头已经在 vcl_recv() 中设置。例如:
vcl 4.0;
import std;
acl admin_net {
"10.10.1.160/27";
}
sub vcl_deliver {
if (std.ip(req.http.ClientIP,"0.0.0.0") ~ admin_net) {
// do something ...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4216 次 |
最近记录: |