我正在使用 varnish 来加速我的网站,但我注意到,由于它在技术上是一个反向代理,所有 IP 都显示为 127.0.0.1 - 我已经通过使用 解决了这个问题
HTTP_X_FORWARDED_FOR
,但这只是修复了 php 程序,例如我的论坛。我在这里读过类似的问题,人们在尝试在 htaccess 中执行“拒绝”时遇到问题,由于 varnish,它无法正常工作。
我研究过的许多解决方案都表明,在 varnish 级别阻止 IP 是可行的方法,但不幸的是,这也不起作用。我尝试过使用 apache 的 mod_rpaf 尝试在 htaccess 级别阻止 IP,但这也没有任何效果。
下面是我的 varnish 代码,用于尝试阻止示例 IP:
sub vcl_recv {
if (client.ip ~ blacklist) {
return (synth(403));
}
}
现在 acl 黑名单
acl blacklist {
"1.1.1.1";
}
通过此设置,1.1.1.1 仍然可以访问网站,并且不会转到我的 403 页面。需要说明的是,我使用的是 varnish 4,因此“错误 403”不再兼容,因此您需要使用return
。
我做错了什么吗?其他人是否也遇到过需要在 varnish 级别阻止 IP 的情况?有什么建议吗?
提前致谢。
答案1
以供参考,这里是 Varnish 4.0 的 ACL 文档。
这应该没关系,但是您是否尝试过明确说明网络掩码?
acl blacklist {
"1.1.1.1"/32;
}
Varnish 是否位于堆栈的最前端?如果您使用 查看请求varnishlog
,您看到的 IP 是否符合您的预期?