Nginx的防盗链
一、一般的防盗链如下: location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked ; if ($invalid_referer) { rewrite ^/ http://www.ccvita.com/403.html; #return 404; } } 第一行:gif|jpg|png|swf|flv 表示对gif、jpg、png、swf、flv后缀的文件实行防盗链 第二行: 表示对www.ccvita.com www.phpq.net这2个来路进行判断 if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回404也是可以的。二:针对图片目录防止盗链
location /p_w_picpaths/ { alias /data/p_w_picpaths/; valid_referers none blocked server_names *.xok.la xok.la ; if ($invalid_referer) {return 403;} }三、NginxHttpAccessKeyModule实现防盗链
1. 下载NginxHttpAccessKeyModule模块文件:; 2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;vi config
--content-- USE_MD5=YESUSE_SHA1=YESngx_addon_name=ngx_http_accesskey_moduleHTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_accesskey_module.c" 3. 用一下参数重新编译nginx:
./configure --prefix=/usr/
local
/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/src/soft/nginx-accesskey
4. 修改nginx的conf文件,添加以下几行: location /download { accesskey on; accesskey_hashmethod md5; accesskey_arg "key"; accesskey_signature "mypass$remote_addr"; }
其中: accesskey为模块开关; accesskey_hashmethod为加密方式MD5或者SHA-1; accesskey_arg为url中的关键字参数; accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。 3 | make && make install |
按照以上的设置,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.91vmall.com/shop/test.rar?key=".md5("password".$_SERVER['REMOTE_ADDR']));
这样用户就能顺利访问到含有正确key值的资源了。 最后提一句,要实现真正的深度防盗链,需要有冗余备份防盗链措施辅助,比如你可以即使用传统的判断referer的防盗链, 再结合accesskey模块,那么大约能够保证万无一失了.
key加密方法: 给这个字符串md5加密"123443555$remote_addr" //密钥字符串,变量$remote_addr是客户端ip地址 生成的加密串是32位小写的:7f938c21e8669463a881d4b6509b8c04
关于资源加密和防盗链: 正常的资源真实地址 这个直接下是非法的会被拒绝 用户要在网站点击下载某个文件的时候程序自动生成一个key,然后给他一个下载链接,他用这个连接就能合法下载了 每个客户每次下载的时候都要生成一次这个key
当他下完把这个链接复制给别人或者发布到其它网站的时候 因为ip不同别人就下不了
相关文档:
《》:http://www.ccvita.com/348.html 《》:http://www.ccvita.com/336.html 《》:http://www.ccvita.com/319.html 《》:http://www.ccvita.com/312.html