1

我有一个网络服务,用户通过 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 的东西我可以切换到它!

4

1 回答 1

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 的总速率。

于 2012-08-18T10:00:07.317 回答