一,普通防盗,根据header头信息进行判断
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { #expires 30d; #access_log off; ##valid_referers none blocked *.xxx.com xxx.com; valid_referers *.xxx.com xxx.com; if ($invalid_referer) { return 403; #rewrite ^/ http://img.xxx.com/err.jpg; } }
或者对某个图片目录防盗
location /images/ { ##alias /data/images/; valid_referers none blocked server_names *.xxx.com xxx.com ; if ($invalid_referer) {return 403;} }
二,使用ngx_http_accesskey_module
下载NginxHttpAccessKeyModule模块文件
修改nginx accesskey配置文件
vim nginx-accesskey-2.0.3/config #修改$HTTP_ACCESSKEY_MODULE为ngx_http_accesskey_module 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"
3. 编译nginx
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module \ --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --add-module=./nginx-accesskey-2.0.3/ make make install
4. 修改nginx配置文件
#location / { #限制相应目录 location ~ .*\.(7z|iso|msi|tar|zip|rar|gz|exe)$ { #或限制相应文件accesskey on; accesskey_hashmethod md5; accesskey_arg "key"; accesskey_signature "pass$remote_addr"; #pass为干扰码,可自定义修改 }
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为pass和访问IP构成的字符串。
5. 防盗代码测试
$ipkey= md5("pass".$_SERVER['REMOTE_ADDR']); echo "<a href="file.rar">file</a>"; echo "<a href="file.rar?key=".$ipkey."">file.rar?key=".$ipkey.">file</a>";
三,使用secure_link防盗
为nginx安装secure_link模块
# ./configure --with-http_secure_link_module \ --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module # make # make install
2. 配置nginx
location / { secure_link $arg_md5,$arg_expires; #设置两个变量 secure_link_md5 "key$remote_addr$arg_expires"; #设置md5,当作口令 if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } }
3. 防盗代码测试
$secret = 'key'; // key,自定义秘钥 $ipip=$_SERVER["REMOTE_ADDR"]; $expires = time()+300; //这里是300妙内访问有效 $md5 = base64_encode(md5($secret . $ipip . $expires, true)); // MD5生成 $md5 = strtr($md5, '+/', '-_'); // + and / 替换掉 $md5 = str_replace('=', '', $md5); // 替换= $url = "http://domain.com/test.zip?md5=$md5&expires=$expires"; //安全下载链接demo设置 $arr = array("url"=>$url, "expires"=>date("Y-m-d H:i:s", $expires), "md5"=>$md5); echo json_encode($arr); //json格式输出
访客评论