如何限制多个Web服务器和连接的用户总带宽?

时间:2012-08-18 07:50:10

标签: apache nginx limit bandwidth throttling

我有一个网络服务,用户下载通过apache2反向代理隧道传输的文件。

我正在使用mod重写和P标志以及重写映射。

基本上它看起来像这样:

<Location /my-identifier>
    RewriteEngine on
    RewriteRule /my-identifier/(.*) ${my-rewrite-map:$1} [P]
</Location>

我知道我可以使用mod_bandwidth或类似的东西来限制每个服务器的一个连接甚至一个ip-address的带宽。

但是我希望限制仅对某些用户(即那些流量大且超出合理使用量的用户)生效。

我还希望它跨越多个服务器。

我可以设置一个自定义环境变量,如果这有帮助(我可以完全控制我可以编码的URL,并可以使用重写规则设置它)!

基本上我想要的是例如对于达到极限的用户而言,无论他们使用多少连接或连接多少服务器,他们的速度都只有5 mbps。

有可能吗?有模块吗?

我的想法是一个集中式数据存储,服务器在每个ip上报告其流量统计信息。可能是某种RRD数据结构。然后,他们可以在指定的时间间隔(例如最后60秒)内为ip选择流量,并根据它应用节流因子。

但我真的不想自己做这一切,我可以,但这需要几个月......我也不会受到阿帕奇的束缚。我也使用Nginx服务器做同样的事情,如果Nginx有什么东西可以切换到它!

1 个答案:

答案 0 :(得分:1)

我不知道Apache,但是既然你把Nginx列为标签,那么下面的方法怎么样?

将Nginx设置为具有或多或少以下配置的Apache服务器或Web服务的反向代理:

upstream serverlist {
  server www1.example.com;
  server www2.example.com;
  server www3.example.com;
}

location / {
  proxy_pass http://serverlist;
}

您拥有的“整体连接”要求不能直接映射,但是通过添加到位置块的以下指令的组合,您可以合理地接近您想要的内容:

更新: 有一个第三方Nginx模块限制了每个IP的总体速率here