阻止 Varnish 后面的 IP

阻止 Varnish 后面的 IP

我正在使用 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 是否符合您的预期?

相关内容