我使用 Varnish ACL 通过 IP 阻止不需要的客户端,随着阻止列表/ACL 的增长,VCL 的编译时间也大大增加。前几天,我又添加了 25K 个 IP 进行阻止,Varnish 不再加载 VCL,而是响应:
“命令失败,错误代码 400”“CLI 通信错误 (hdr)”。
有人知道如何使用 Varnish 来阻止大量 IP 地址吗?
我不想使用 iptables 因为我想用页面来响应403 error
。
目前的黑名单 ACL 包含大约 190K 个条目,其中大多数是单个 IP(即 /32,而不是范围)。
/usr/bin/varnishadm -S /etc/varnish/secret -T localhost:6081 vcl.load file_default.vcl_time_1542634958 /etc/varnish/default.vcl
Command failed with error code 400
CLI communication error (hdr)
real 33m20.101s
user 0m0.004s
sys 0m0.000s
代码和编译步骤似乎有效,因为无负载编译不会引发错误。
/usr/sbin/varnishd -C -f /etc/varnish/default.vcl
real 34m50.554s
user 34m33.124s
sys 0m15.332s
答案1
对我来说看起来像是一个真正的错误:https://github.com/varnishcache/varnish-cache/issues/3542
答案2
增加cli_buffer
(CLI 命令输入的缓冲区大小;默认 8KB)和/或cli_limit
(CLI 响应的最大大小;默认 128KB)参数可能会解决该问题。