Apache限制下载线程数与带宽详解

2014年放了一台服务器到数据中心,发现下载量很大,大部份是用迅雷下载这样会造成服务器负担过大,有人下载时会打不开网页的现象,所以网上查找解决下载限制的方法。
找到mod_limitipconn与mod_bw这两个模块,前者是限制下载线程数,后者是限制带宽但是发现,网上90%是转载的文章,有些根本没有实际使用过,经过我花大量的时间,才真正用上了这两个模块。现在一个一个介绍。

首先要使用这两个模块,必须在httpd.conf找到
LoadModule status_module modules/mod_status.so
将前面的#去掉
同时在这句下面写上
ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.dll
LoadModule bw_module modules/mod_bw.dll
我使用的是windows 如果是其它系统,dll 换成so
我使用的环境是XAMPP1.7.7 apache 2.2.21

mod_limitipconn
官网下载地址:http://dominia.org/djao/limitipconn.html
限制下载线程模块,我希望用户只能开5个线程进行下载,只对ZIP,RAR做限制,不对其它文件做

限制,所以用户可以打开N多个网页,根据官方使用说明是这样的
<Location />
# 全局设置,对所有网站进行
MaxConnPerIP 1
NoIPLimit image/*
<Location /somewhere>
# 对指定目录设置,/somewhere代表网站根目录下的somewhere
目录
MaxConnPerIP 3
OnlyIPLimit audio/mpeg video
</Location>

</Location>
上面表示什么意思呢,就是说,对所有网站所有目录,限制同一个IP只能访问一次网站
但是 NoIPLimit image/* 对图片不影响,也就是说,你打开网页只能打开一次,你马上打开另一

个页面会出现503的错
OnlyIPLimit audio/mpeg video 表示仅对 音频与视频文件做IP线制,而且是somewhere目录 。

这就是官方的例子,也是大部份网站转载的例子,但实际上根本不符合要求。
比如说 audio/mpeg video image/* 是怎么来的呢,如何写呢,这里我告诉大家,这是MIME类型

,在apache的conf目录中有一个mime.types文件里面列出了常用的MIME类型
现在,我要对ZIP,RAR文件做限制,下载嘛,也就是这两种文件的包大,正确成功的写法如下

<Location />
MaxConnPerIP 5
#OnlyIPLimit application/zip application/octet-stream application/x-rar-compressed
OnlyIPLimit application/zip application/x-rar-compressed
</Location>
看到没,只允许用户下载zip,rar同时开5个线程下载,打开第6个就会返回503的错
这里有一点要注意,这个限制线程的模块MIME*好是确定的类型,像application/octet-stream
是不能成功的,这个表示bin iso等多种类型的MIME
只有像application/zip这种确定唯一类型的才会生效成功,多种类型之间用空格隔开

NoIPLimit的写法和OnlyIPLimit是一样的,这里就不列出了,一般是用不上,下面这张图是监控出来的效果,用的是卡巴网络监视