用accesskey模块实现Nginx服务器深度防盗链

    防盗链是很多下载类网站必须做的工作,各个网站会采取不同的策略来实现这一功能,各有优缺点。下面介绍一下在Linux主机的Nginx服务器下利用accesskey模 块实现Nginx服务器深度防盗链的方法。比起常用的通过判断referer的方法,其防盗链能力更加强劲,就算迅雷什么的也没有办法对付。

一、如何为nginx安装accesskey模块
首先下载Nginx-accesskey模块:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz

#tar zxvj nginx-accesskey-2.0.3.tar.gz

比如说这时候文件解压到/usr/src/nginx-accesskey-2.0.3

修改其目录下的config文件 
#vi ./config
将"$HTTP_ACCESSKEY_MODULE"替换成"ngx_http_accesskey_module"

杀死nginx进程
#kill `cat /usr/local/nginx/nginx.pid`
来到nginx的源代码目录下面 /usr/src/nginx-0.7.54,重新编译nginx
#cd /usr/src/nginx-0.7.54/
#./configure  --add-module= /usr/src/nginx-accesskey-2.0.3
(注意:其他nginx编译参数请按照自己的需要添加,这里省略未写)
#make && make install

配置nginx.conf
#vi /usr/local/nginx/conf/nginx.conf
在你需要设置防盗链的主机的下面加入以下内容,比如主机根目录下面download目录下面的文件都要防盗链,那么就加入:
    location /download
    {
      accesskey on;
      accesskey_hashmethod md5;
      accesskey_arg "key";
      accesskey_signature "password$remote_addr";
}
注意:这里accesskey_signature后面的password是干扰码,你可以改为自己需要的密码。

设置完毕,重启nginx
#ulimit -SHn 51200
#/usr/local/nginx/sbin/nginx
至此,accesskey模块安装完毕。

二、如何使用防盗链功能
按 照以上的设置,download文件夹下所有的文章如果用地址直接引用,比如http://www.xinkexue.com/download /test.rar,都会提示403错误,无法访问到资源,这也就是我们说的防盗链功能已经生效。那么要如何才能让我们的目标用户下载这些文件呢?方法就 是我们要给用户一个正确的链接,形如http://www.xinkexue.com/download /test.rar?key=343423523b5423523952352bg2g
这个key后面的参数是根据前面设定的 accesskey_hashmethod和accesskey_signature确定的,比如我们前面的设定就是对 password$remote_addr($remote_addr代表客户端传递过来的IP)的值进行MD5加密运算得到的结果。我们要把带有key 值的地址重新定向给目标用户,这样我们的目标用户才能下载到资源,没有key或者key值错误,都将被认为是盗链,而无法下载。

下面我们用PHP脚本的header重定向函数举例说明:
//其他代码省略

//header函数实现重定向
header("location:http://www.xinkexue.com/download/test.rar?key=".md5("password".$_SERVER['REMOTE_ADDR']));

这样用户就能顺利访问到含有正确key值的资源了。
最后提一句,要实现真正的深度防盗链,需要有冗余备份防盗链措施辅助,比如你可以即使用传统的判断referer的防盗链,再结合accesskey模块,那么大约能够保证万无一失了,阿弥陀佛:)

参考文献:
http://wiki.nginx.org/NginxHttpAccessKeyModule

转载地址: http://www.xinkexue.com/space-1-do-blog-id-391.html

你可能感兴趣的:(用accesskey模块实现Nginx服务器深度防盗链)