用accesskey模块实现Nginx服务器深度防盗链
时间:2009-05-11
来源:互联网
防盗链是很多下载类网站必须做的工作,各个网站会采取不同的策略来实现这一功能,各有优缺点。下面介绍一下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 ... 3b5423523952352bg2g
这个key后面的参数是根据前面设定的accesskey_hashmethod和accesskey_signature确定的,比如我们前面的设定就是对password$remote_addr($remote_addr代表客户端传递过来的IP)的值进行MD5加密运算得到的结果。我们要把带有key值的地址重新定向给目标用户,这样我们的目标用户才能下载到资源,没有key或者key值错误,都将被认为是盗链,而无法下载。
下面我们用PHP脚本的header重定向函数举例说明:
<?php
//其他代码省略
//header函数实现重定向
header("location:http://www.xinkexue.com/download/test.rar?key=".md5("password".$_SERVER['REMOTE_ADDR']));
这样用户就能顺利访问到含有正确key值的资源了。
最后提一句,要实现真正的深度防盗链,需要有冗余备份防盗链措施辅助,比如你可以即使用传统的判断referer的防盗链,再结合accesskey模块,那么大约能够保证万无一失了,阿弥陀佛:)
参考文献:
http://wiki.nginx.org/NginxHttpAccessKeyModule
一、如何为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 ... 3b5423523952352bg2g
这个key后面的参数是根据前面设定的accesskey_hashmethod和accesskey_signature确定的,比如我们前面的设定就是对password$remote_addr($remote_addr代表客户端传递过来的IP)的值进行MD5加密运算得到的结果。我们要把带有key值的地址重新定向给目标用户,这样我们的目标用户才能下载到资源,没有key或者key值错误,都将被认为是盗链,而无法下载。
下面我们用PHP脚本的header重定向函数举例说明:
<?php
//其他代码省略
//header函数实现重定向
header("location:http://www.xinkexue.com/download/test.rar?key=".md5("password".$_SERVER['REMOTE_ADDR']));
这样用户就能顺利访问到含有正确key值的资源了。
最后提一句,要实现真正的深度防盗链,需要有冗余备份防盗链措施辅助,比如你可以即使用传统的判断referer的防盗链,再结合accesskey模块,那么大约能够保证万无一失了,阿弥陀佛:)
参考文献:
http://wiki.nginx.org/NginxHttpAccessKeyModule
作者: raftcham 发布时间: 2009-05-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28