我有一个要求,当当前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阅读这篇优秀的文章