大型 Varnish VCL 无法加载

大型 Varnish VCL 无法加载

我使用 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)参数可能会解决该问题。

相关内容