我如何才能限制每个用户而不是网页的服务器带宽?

我如何才能限制每个用户而不是网页的服务器带宽?

我想限制我的域中每个用户的 .flv 和 .mp4 文件的下载速度。我的页面每天有 1000-3000 名访问者,他们无法同时观看我的内容,因为 1-2 个人占用了我所有的带宽。

我想给每个用户 200KiB/s......

如果我的流有 10 个听众,那么他们使用 2Mib/s,而不是 30-40Mib/s...并且我想给他们一个最低限度..

我尝试了带宽模块,但它适用于域,而不适用于用户。

BandwidthModule 开启 ForceBandWidthModule 开启 LargeFileLimit .flv 1 204800 LargeFileLimit .mp4 1 204800

有没有容易安装的 apache 模块?或者我只能限制下载光纤?... 通过 IP 或连接限制下载速度...

答案1

看起来像mod_cband可能是您最好的选择。该CBandRemoteSpeed指令专门限制每个客户端 IP 的连接数、每秒连接数和连接速度。它似乎没有“每个文件类型”选项。根据文档,它是按文件类型设置的,<VirtualHost>因此如果您只想限制 .flv 和 .mp4 文件,则需要将它们单独移动到虚拟主机(例如streaming.example.com)并在那里启用 cband。

答案2

如果没有 Apache 内部解决方案,而我们这里讨论的是 Linux,那么可以使用流量整形来实现这一点。您所需要的只是能够(快速)向 Apache 外部传达相应进程属于某个用户的信息。也许您可以重写文件的 URL,以便 Apache 调用 PHP 脚本。该脚本将确定用户和进程 ID,并在发送请求的数据之前将两者写入一个小的“守护进程”(例如 Python 脚本)。这个守护进程将在 mangle 表中添加带有 --pid-owner 的 iptables 规则(不再起作用,见下文:编辑)并标记数据包(每个(活动)用户一个数字)。

您将为每个同时活动的用户定义一个 HTB 类。tc 过滤器将根据 iptables 设置的 nfmark 为每个数据包分配一个类。您可以决定这些类是否将 200KiB/s 作为硬限制或额外获得备用带宽。这样,无论用户打开了多少个连接,限制都是针对所有连接的。

有时“守护进程”必须检查所有进程是否仍然存在,并删除已经消失的进程规则。

编辑

似乎选项 --pid-owner 已从 iptables 中删除。基于用户或组进行过滤的可能性可能没有帮助。但 PHP 脚本知道目标地址,因此它可以使用这些参数调用脚本来创建相应的规则。

答案3

作为德夫克已经提到过,mod_cband可以快速完成工作,但是 CPU 密集型承受更大的工作量。

专业带宽限制的神奇之处在于它能够分离服务

如果您处于共存托管环境中,则可以从附加的 1HE 机器开始。

相关内容