Apache限制多线程下载

服务器上共享了一部连载漫画,刚开始发现迅雷的盗链下载很厉害,就用 .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
    #仅对声音/视屏等多媒体文件进行限制下载

LAMP

Email: i at onepx dot com || QQ: ⑧九零三④幺 || 微信: onepxcom
©2023 一像素 蜀ICP备13026576号-2 网站地图