我有一个网络服务,用户下载通过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有什么东西可以切换到它!
答案 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。