限速(切断)如果每分钟超过n个连接

你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