利用nginx的Accesskey模块实现flv视频文件防盗链

本文的方法主要有两种情况,利用Nginx自带的模块和第三方模块ngx_http_accesskey_module,相对于前者来说后者的效果更强,深度防盗比较不错。

一、一般的防盗链如下:

location ~* \.(gif|jpg|png|swf|flv)$ 
{
valid_referers none blocked www.xsdou.com xsdou.com;
if ($invalid_referer) 
{
  rewrite ^/ http://db.ci/404.html;
  #return 403;
}
}

第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.xsdou.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到指定页面,当然直接返回403也是可以的。

二、针对图片目录防止盗链:

location /images/ 
{
alias /data/images/;
valid_referers none blocked server_names *.xsdou.com xsdou.com;
if ($invalid_referer) {return 403;}
}

三、使用第三方模块ngx_http_accesskey_module实现Nginx防盗链
首先下载Nginx-accesskey模块:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz

tar -zxvf nginx-accesskey-2.0.3.tar.gz

比如说这时候文件解压到/usr/src/nginx-accesskey-2.0.3
修改其目录下的config文件

cd /usr/src/nginx-accesskey-2.0.3
vi ./config

$HTTP_ACCESSKEY_MODULE

替换成

ngx_http_accesskey_module

修改后的config文件如下:

USE_MD5=YES
USE_SHA1=YES
ngx_addon_name=ngx_http_accesskey_module
HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_accesskey_module.c"

杀死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://db.ci/download/test.rar,都会提示403错误,无法访问到资源,这也就是我们说的防盗链功能已经生效。那么要如何才能让我们的目标用户下载这些文件呢?方法就是我们要给用户一个正确的链接,形如http://www.xinkexue.com/download/test.rar?key=3b5423523952352bg2g
这个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值的资源了。

或者


点赞
  1. 滤器说道:
    TheWorld Browser Windows XP
    盗链很多啊