服务器达到某个吞吐量时拒绝新的HTTP请求

我有一个要求,当当前HTTP响应的全局传输速率超过一定的水平时,运行拒绝新的HTTP请求的HTTP服务器(使用503或类似的)。 例如,如果Web服务器以98Mbps传输,并且有新的HTTP请求到达,我们会拒绝这个(因为我们无法保证一个很好的速度)。

我看了一下Apache的mod_cband,nginx的limit_req和lighttpd的速率限制function,但是他们没有一个能够处理我的(相当人为的,被认可的)用例。

我应该补充一点,我可以使用几乎所有的Web服务器,并且可以在iptables规则中实现这一点,如果有人能够制定这样的规则! (拒绝TCP连接是好的,它不必用HTTP 503响应)。

有什么build议么?

当带宽太高时,iptables会计脚本写入文件。 使用rewritemap读取地图的mod_rewrite规则,地图文件将包含

被阻塞了

(需要lhs和rhs)

在你的<VirtualHost>容器中:

RewriteMap blockmap txt:/path/to/file/map.txt 

在您的.htaccess(或<VirtualHost>)

 RewriteEngine on RewriteCond ${blockmap:blocked|NOTFOUND} ^blocked$ RewriteRule .* http://www.google.com/ [R=301,L] 

而不是redirect,交给他们稍后回来的页面,将其作为错误503等。

要做到这一点,你可以在你的Apache前设置一个Haproxy。 configurationHaproxy的速率限制从Kyle Brandt阅读这篇优秀的文章