速率限制配置错误的机器人

速率限制配置错误的机器人

我们在负载均衡器后面安装了 Nginx / PHP-FPM,它会定期进行抓取。许多抓取工具严重影响我们应用程序的 404 页面。

有没有办法在 Nginx 中,可能与速率限制模块或者使用不同的模块,在每分钟超过 100 个请求出现 404 错误后根据 x-forward-for 阻止所有流量?

我找到的文档限制请求模块看起来它是基于资源而不是页面返回状态。

流量足够大,每个节点都看到足够多的 404 流量,因此他们不需要沟通要集体阻止谁。

答案1

您当然可以使用 limit_req_zone 模块在 nginx 中做到这一点。

在 nginx.conf 设置一个区域:

limit_req_zone $binary_remote_addr zone=one:1000m   rate=100r/m;

您也可以使用它X_Forwarded_For来代替binary_remote_addr

在您的站点配置位置块中只需引用区域:

limit_req zone=one burst=10 nodelay;

文件: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

答案2

您可以使用 fail2ban 并使用以下 jail 与 nginx 一起对配置错误的机器人进行速率限制

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 并在底部添加

[nginx-req-limit]

enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10

参考:https://rtcamp.com/tutorials/nginx/fail2ban

相关内容