你build议我使用基于n每分钟连接速度限制传入的http连接(get / post)?
如果一个特定的客户端在一个给定的分钟内连接了多于n个连接,那么就把所有的连接放到一个分钟以内。
我目前使用nginx和haproxy,但我真的在寻找最好的工具。
更新
有些客户端允许每分钟允许更多的连接,会有一种方法来添加每个客户端的规则? 一个API将是一个奖金。
这取决于你如何优雅地应用中断。 对于TCP层的DROP / DENY,你可以使用类似于iptables的方法做到这一点:
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
你可以针对特定的客户,为第二个规则提供额外的select
iptables -I INPUT -s 1.2.3.4 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 50 -j DROP iptables -I INPUT -s 4.3.2.1 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
我不确定nginx是否支持这种types的限制。 但是,你可以使用iptables limit模块。 你可以看看这个页面的更多解释。
这里是一个以5 conn /分钟的速率接受新的HTTP连接的例子。
-A FORWARD -d your.server.ip.addr -m state --state NEW -p tcp --dport 80 \ -m limit --limit 5/minute -j ACCEPT