Nginx配置geo封禁恶意IP时正常请求被拦截怎么办?
最近在配置Nginx服务器时,想通过geo模块封禁恶意扫描IP,但设置后正常访问也出现403了。我按网上的教程写了geo和limit_req配置,但测试时自己的IP被莫名拦截,日志显示匹配到了某个规则。检查配置发现可能是CIDR范围写错了,但改过几次还是不行…
配置片段如下(用CSS代码块包裹,但实际是Nginx配置):
geo $bad_clients {
default 0;
192.168.1.0/24 1;
10.0.0.0/8 0; // 这里可能搞反了标记值?
172.16.0.0/12 1;
}
limit_req_zone $binary_remote_addr zone=antibots:10m rate=20r/s;
server {
location / {
if ($bad_clients) { return 403; }
limit_req zone=antibots burst=5 nodelay;
}
}
现在连本地测试访问都报403,但日志里显示请求速率并不高。难道geo的默认值设置有问题?或者CIDR范围覆盖了自己的IP?
改一下配置试试这个:
记得用
nginx -t测试配置文件语法,重启Nginx前确保规则改对了,别把自己也挡外面了。geo配置里,default 0没问题,但某些 CIDR 可能覆盖了你自己的 IP。省事的话直接把你的公网 IP 加到geo里设为 0 就行。如果还不行,检查
access_log看匹配哪个规则了,直接改对应的 CIDR。