English
 电子信箱
 加入收藏

  威盾防火墙 >> 支持与下载 >> 技术文章 >> Apache限制多线程下载

 

Apache限制多线程下载

威盾防火墙 2014-11-20

 
服务器上共享了一部连载漫画,刚开始发现迅雷的盗链下载很厉害,就用 .htaccess 屏蔽了迅雷下载。而后来下载的人越来越多,其它多线程下载软件的威力也不容小视,Apache 平均每秒钟就要新开 3 个线程,遇到集群下载,还真有点吃不消。

平时,服务器上50来个进程在运行,耗内存480M左右; 
下载集中的时候,服务器上300多个进程在运行(绝大多数是httpd),内存最高消耗1.5G,到达当前VPS允许使用的最大内存。 
看来不对多线程下载进行限制是不行了,好在这个问题在 Apache 下解决起来并不是难事。不想重新编译 httpd,就用 DSO 模式安装非官方mod_limitipconn:

wget http://dominia.org/djao/limit/mod_limitipconn-0.23.tar.bz2
tar xjvf mod_limitipconn-0.23.tar.bz2
cd mod_limitipconn-0.23
make
make install

这里安装的版本是适合 Apache 2.2.X 的,理论上也可以用在 Apache 2.0.X 上,如果更老的 Apache 1.3,自己去看吧….mod_limitipconn.c。

安装好后需要编辑 httpd.conf :

vim /usr/local/apache/conf/httpd.conf

找到 ExtendedStatus On 这行,如果前面有 # 号注解,就删除 #。

再搜索 mod_limitipconn.so 找到这行:

LoadModule limitipconn_module modules/mod_limitipconn.so

上面这行应该是在安装的过程中自动添加到 httpd.conf 里面的,保留,把如下内容添加到它的下面:

<IfModule mod_limitipconn.c>
<Location /Velvet_Kiss>
MaxConnPerIP 2
</Location>
</IfModule>

保存 httpd.conf 退出,重启Apache,就可以去测试效果了。

<Location /Velvet_Kiss>的意思是,Apache 只会限制 Velvet_Kiss 目录下同 IP 的链接数。比如,如果还有一个目录叫 /download,那么用户只能开 2 个线程下载 /Velvet_Kiss 目录下的文件,却可以开多线程下载 /download 目录下的文件。Linux 下 Apache 的目录结构通常是这样的,/home/user1/public_html/xxxx,设置限制多线程下载目录的时候,我们只需要 /xxxx 就可以了,不需要绝对路径。<Location />是对全站进行限制。

MaxConnPerIP 2 的意思自然是同 IP 下最多只能开启两个线程下载,其余的线程将遭遇“Service Temporarily Unavailable”。

Apache限制多线程下载的一些扩展命令:

NoIPLimit img/*
#表示对 img 文件夹不进行限制 
OnlyIPLimit audio/mpeg video
#仅对声音/视屏等多媒体文件进行限制下载

相关内容: 最新内容:
用vsftp限制用户下载速度和线程数[2014-11-20]
突破下载单线程限制[2014-11-20]
突破ftp服务器单线程下载限制[2014-11-20]
秘籍:突破单线程下载的限制[2014-11-20]
入侵渗透进入某学校网站服务器[2014-11-20]
黑客入侵攻防详解 (3)[2014-11-20]