Answers:
Nginx指令limit_rate
可让您指定要对限制响应进行评分的速度,例如
location / {
if ($slow) {
limit_rate 4k;
}
}
Nginx文档在这里。(从文档中,您将看到您的后端可以做出决定,并请求Nginx限制客户端的速率)
如何获得此$slow
变量集取决于您的配置。最简单的方法是通过geo
映射进行设置:
geo $slow {
default 0;
1.2.3.0/24 1;
}
“地理位置”映射是$slow
基于客户端IP地址的依赖项。默认情况下为0,如果客户端IP地址在1.2.3.0/24
子网中,则为1 。在此处查看有关“ geo”的Nginx文档
使用“ fail2ban”是整个解决方案的合理演变。您可以使用“ fail2ban”来自动检测异常活动并为Nginx收集IP,然后重新加载Nginx,以便它重新读取需要减速和/或阻止的IP地址列表。
如果您想欺骗冒犯的用户以为他仍然未被您注意,则可以使用nginx的请求限制模块(http://wiki.nginx.org/HttpLimitReqModule)。
首先定义一个请求限制区域:
http {
limit_req_zone $binary_remote_addr zone=spammers:1m rate=30r/m;
}
该区域将使用违规者的IP地址来识别请求并将请求限制为每分钟30次(1/2秒)。请注意,该区域的内存大小设置为1 MiB,这意味着它可以处理1 MiB /每个请求存储区64个字节= 16384个垃圾邮件发送者地址(对于我们的情况而言,这可能是一个过高的选择)。如果需要,分别进行调整。
接下来,我们定义了一种指令,该指令将使用(不幸的是,如果不幸的话)情况通过限制器实际路由罪犯:
location / {
if ($remote_addr = 1.2.3.4) {
limit_req zone=spammer burst=5;
}
}
您可以在服务器的访问日志中查看工作成果。
请注意,这种黑客攻击方式无法很好地扩展,因为每次违规者更改IP时,您都必须更新配置文件(更不用说在其中包含更多IP了,如果情况允许,则意味着更多),但是它可以正常工作。