本着节约带宽、权限下载的原则,寻觅下载防盗链技术。
一、“referers”方式检测来路
location ~* .(gif|jpg|png|swf|flv)$ { valid_referers none blocked *.eact.com.cn; if ($invalid_referer) { return 403; } }
仅适用于图片防盗链。现在的大部分下载软件都可以模拟构建来路,其他网站的盗链仍然无法避免。
二、php-mysql-odbc-ftp方式
让serv-u的ini配置文件通过odbc与数据库连接,php程序分配临时口令-ftp服务器通过数据库验证下载权限,提供ftp下载服务。
1、优点:
可以有效控制有效期、线程限制、速度限制。基本能够满足需求。本站曾经采取过此方式提供下载
2、缺点
依赖ftp服务器、数据库和他们的通信,频繁操作数据库,易引起故障。
三、php流式输出
由php读取文件,通过验证后使用web server 支持的 sendfile 方式进行流式输出。
1、优点
能够有效控制有效期、权限和速度,很多网站论坛、开源社区都采用此方式。
2、缺点
不能支持断点续传;服务器php模块处理带来一定的硬件消耗;当文件服务器为纯静态时时维护很麻烦。
四、使用web server 防盗链模块
使用nginx的第三方模块Http-Access-Key
这个模块可以阻止所有URL中未包含合法访问令牌的访问(防盗链)。访问令牌可以由访问者IP或者其它服务器变量生成,所以可以很好地控制客户端的下载行为。
用户得到的下载地址可能像这样: http://example.com/download/file.zip?key=09093abeac094
1、下载、解压
wget http://wiki.nginx.org/File:Nginx-accesskey-2.0.3.tar.gztar zxvf Nginx-accesskey-2.0.3.tar.gz
2、安装
然后编辑 “config” 文件,将 “$HTTP_ACCESSKEY_MODULE” 用 “ngx_http_accesskey_module” 替换。然后编译:
./configure --add-module=path/to/nginx-accesskey
3、配置
修改nginx.conf
location /download {accesskey on;accesskey_hashmethod md5;accesskey_arg "key";accesskey_signature "mypass$remote_addr";}
php端:
// some code$url = $filePath.'?'.md5($mypass.$_SERVER['REMOTE_ADDR']);
完成,可以使用了
注:lighttpd也有相应模块,并能进行通过时间戳的有效期验证
参考资料:
五、珍爱带宽,远离迅雷
让 nginx 防止迅雷、快车的多线程下载:
作用域: server location
if ($http_range) { return 405; }
这样给用户端的第二个线程返回405,只让nginx单线程给用户吐数据。没搜到说明,只是网上的一个帖子~
转: