【问题标题】:How can I limit a users total bandwidth across multiple webservers and connections?如何限制用户跨多个 Web 服务器和连接的总带宽?
【发布时间】:2012-08-18 07:50:09
【问题描述】:

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

我将 mod rewrite 和 P 标志与 rewrite map 结合使用。

基本上是这样的:

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

我知道我可以使用 mod_bandwidth 或类似的东西限制一个连接的带宽,甚至每个服务器的一个 IP 地址。

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

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

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

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

有可能吗?有模块吗?

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

但我真的不想一个人做这一切,我可以,但需要几个月的时间......我也不受 apache 的约束。我也在用 Nginx 服务器做同样的事情,如果有 Nginx 的东西我可以切换到它!

【问题讨论】:

    标签: apache nginx limit bandwidth throttling


    【解决方案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;
    }
    

    您的“整体连接”要求不能直接映射,但您可以通过将以下指令组合到 location 块中来合理地接近您想要的:

    更新: 有一个第 3 方 Nginx 模块限制了每个 IP 的总速率,可以找到 here

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多