找回密码
 立即注册
查看: 12075|回复: 4

[其他] windows平台下apache完美限制下载速度

[复制链接]

已分享文件:0个

网盘今日赚:积分

发表于 2010-2-27 08:38:02 | 显示全部楼层 |阅读模式
windows下利用apache打造完美限制的HTTP下载服务器
话说现在建站真不容易,想好好搞一个站,总会被人WC的采集,盗链,攻击,无人值守的垃圾站比苦心经营的站收入还要可观。所以保卫好自己的服务器是一件很重要的工作。
小站别特软件园(disk.lply.net)上线两个月,受到了很多朋友的支持和拥护。服务器是win2003系统,一开始本来准备选择使用FTP作为下载服务器的,不过过了几天就发现很多都是通过盗链的方式来FTP下载。这下服务器在持续性全速提供上传,但是网站的页面浏览量却少得可怜。因为FTP天生不能放盗链的特性所以只能考虑放弃使用,最后决定用HTTP下载来替代。

直接用HTTP服务器下载也不是很容易的事。最开始在IIS里面配置,IIS只能设定最大下载速度和最大连接数,这对于一些使用下载工具一来就开50+线程霸道下载的朋友明显是防不住的。网上搜了N久就发现一个用Delphi写的看不懂的ISAPI Filter以及别的收费软件若干。试过之后都起不了作用,也便放弃了,最后发现Apache有这些开源的功能模块,最终打造出完美限制的HTTP下载服务器。

首先说说完美限制的意思:防盗链、限制客户端下载线程数,限制下载带宽。下面一一介绍怎么在Apache里面实现这些功能。

防盗链

传统的防盗链都是通过Referer来判断用户来路的,不过这样的方法对于下载工具来说形同虚设,因为现在的下载工具早就能伪造Referer了。

现在一些流行的防盗链的方式都是用在浏览页面的时候产生一个随机验证码,在用户点击连接的时候服务器会验证这个验证码是否有效从而决定是否允许下载。或者就是用某些方法把文件实际地址进行伪装。不过我觉得这些都不怎么好用,我用了一个简单有效的方式来实现防盗链。

其实就是用Apache的URL Rewrite模块就能很简单的就能实现防盗链下载。

在Apache的httpd.conf文件里面搜索:

#LoadModule rewrite_module modules/mod_rewrite.so

把它前面的#去掉,再找到<Directory />块,在里面加入类似如下代码:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://lply.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://lply.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.lply.com.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.lply.com$ [NC]
RewriteRule .*\.(gif|jpb|png|css|js|swf])$ http://disk.lply.net [R,NC]

其中有色的地方都是要改为你的:
 红色:就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。
 蓝色:就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过红色的地址才可以访问。
 绿色:如果不是通过红色的地址访问蓝色这些为扩展名的文件时就回重定向到绿色地址上。

这样如果一个盗链而来的请求将会被重定向到错误页面,就算实际地址暴露也不怕。从而防止了服务器资源被盗链的危险。

限制客户端多线程下载

限制多线程现在需要用到一个Apache的扩展模块mod_limitipconn,这里是作者的官方网站http://dominia.org/djao/limitipconn2.html,先下载适合自己版本的模块文件到Apache安装目录下的modules目录下面,然后在httpd.conf文件中搜索:

#LoadModule status_module modules/mod_status.so

把它前面的#去掉,再加入:

ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.dll # 如果你下载的不是Win版,请把后面的文件名改为你所下载的文件名
<IfModule mod_limitipconn.c>
<Location /> # 这里表示限制根目录,即全部限制,可以根据需要修改
MaxConnPerIP 2 # 这里表示最多同时两个线程
NoLimit html/* # 这里表示html目录下不受限制
</Location>
</IfModule>

这样来自同一客户端的超过2个的线程请求将被拒绝,从而限制了客户端的多线程下载。

限制下载带宽

这个同样需要扩展模块支持,模块是mod_bw,在作者的官方网站http://ivn.cl/apache/可以下载到。同样也是放入modules目录下面,然后在httpd.conf文件中加入:

LoadModule bw_module modules/mod_bw.dll

再找到<Directory />块,加入:

<Directory />
BandwidthModule On # 启动带宽限制
ForceBandWidthModule On # 启动带宽限制
Bandwidth all 0
MinBandwidth all 0   # 0表示除下面限制文件外的文件不限速,当然你也可以改成比如400000限制为400K/S
LargeFileLimit *.rar 10240 250000 # 大于10MB的rar后缀文件限速为250K/S,以下类推
LargeFileLimit *.zip 10240 250000
LargeFileLimit *.exe 10240 250000
</Directory>

到此,我们的完美限制的HTTP下载服务器就配置完成了,重新启动你的Apache这些功能便能生效了。因为Apache和这些模块都是开源免费的,我们不需要为此掏一分钱,不用去购买那些第三方的软件,只是需要多去了解一下这些软件的使用说明。不要一切都祈祷有现成美好的东西,自己动手做一次会有不一样的收获。网站实例推介:DISK.LPLY.NET

已分享文件:0个

网盘今日赚:积分

发表于 2010-3-1 20:00:39 | 显示全部楼层
很好!
顶上顶上!

已分享文件:0个

网盘今日赚:积分

发表于 2012-5-16 09:46:54 | 显示全部楼层
很好 不错

已分享文件:0个

网盘今日赚:积分

发表于 2012-5-16 09:47:26 | 显示全部楼层
很好 不错

已分享文件:0个

网盘今日赚:积分

发表于 2012-7-9 10:22:58 | 显示全部楼层
很好!
顶上顶上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|PHPDisk系统交流社区

GMT+8, 2024-12-22 18:08 , Processed in 0.064479 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表