nginx
防盗链配置及防盗链详细教程(含注释)
常见的方法是添加:
1
valid_referersnone阻止了www.example.comexample.com;
其中none表示空的出处,即直接访问,比如直接在浏览器中打开一张图片;
封锁是指被防火墙标记的路由;
Server_names也是域名。0.5.33版本以后,*.example.com可以用来表示所有二级域名。
一、对全站不同文件类型进行防盗链
1
2
3
4
5
6
7
位置~。*.(WMA|wmv|ASF|MP3|MMF|zip|rar|jpg|gif|png|swf|flv)${
valid_referersnoneblocked*.765h.com765h.com;
if($invalid_referer){
#重写http://www.765h.com/error.html;^/
return403;
}
}
第一行:WMA|WMV|ASF|MP3|MMF|ZIP|RAR|JPG|GIF|PNG|SWF|FLV表示带有这些后缀的文件要进行防盗保护;第二行:*.765h.com765h.com说判断这两条路由(*代表任意,任意二级域名),可以多加;第3行:if{}中的内容表示如果路由不是指定路由,跳转到
403错误页面。当然也有可能直接回到404或者一张图。(注意:如果需要跳转到指定的错误页面,取消第四行的注释,改为第五行,第四行的链接改为图片或其他)
二。防止特定网站窃取资源链除了使用http_referer_module,即官方文档链接之外,基本与第一项相同。
1
2
3
4
5
6
位置~*。(WMA|wmv|ASF|MP3|MMF|zip|rar|jpg|gif|png|swf|flv)${
if($http_referer~*"^http://(.+.)?myspace.com/"·^http://(.+.)?blogspot.com/"·^http://(.+.)?livejournal.com/"{
#重写^/http://***。***.***;
return403;
}
}
三。对于不同的站点目录
1
2
3
4
5
6
7
8
location/img/{
位置/img/{
root/data/img/;
root/data/img/;
valid_referersnoneblocked*.765h.com765h.com;
if($invalid_referer){
#重写http://www.765h.com/images/error.gif;^/
return403;
}
}
以上三项是nginx的防盗链功能。只需将修改后的代码添加到/usr/local/nginx/conf/nginx.conf即可(注意:这里指的是默认)。如果站点是独立的,它们将被添加到各自的配置文件中。例如,lnmp添加站点的配置文件在/usr/local/中。
另外,需要注意的是,新手经常报错无效或错误的防盗链,是因为放错位置或与同一个位置冲突造成的。这段代码的正确位置是添加到服务器段的中间,服务器段有好几个位置,所以引用插入就行了。不加修改,其本身的防盗链码会和下面的一段发生冲突,可以去掉或者合并,即“{”后第一行可以加“过期30d”。注意不要忘记分号,保存文件重启nginx或重启lnmp后才会生效。
1
2
3
4
位置~。*.(gif|jpg|JPEG|png|BMP|swf)$
{
过期30d
}
四。ngx_http_accesskey_module,nginx的第三方模块,实现了下载文件的防盗链下面是shell执行命令
1
2
3
#tarzxvfnginx-0.7.61.tar.gz
#cdnginx-0.7.61/
#tarxvfznginx-accesskey-2.0.3.tar.gz
如果没有这个模块,执行WGET-Chttp://wiki.nginx.org/images/5/51/nginx-accesskey-2.0.3.tar.gz并下载回来。
1
2
3
4
#CDnginx-accesskey-2.0.3
#vi配置
#将http_modules="$http_modules$http_accesskey_module"修改为http_modules="$http_modulesNGX_http_accesskey_module"(这是本模块的bug)
#。/configure–user=www–group=www–prefix=/usr/local/nginx–with-http_stub_status_module–with-http_SSL_module–add-module=/root/nginx-accesskey-2.0.3
编译成功后,在主配置文件中添加类似如下的代码:
1
2
3
4
5
6
位置/下载{
accesskeyon;
accesskey_hashmethodMD5;
accesskey_arg"key";
accesskey_signature"mypass$remote_addr";
}
其中:location/download是下载的目录。钥匙是模块开关;access_hash方法是MD5或sha-1;Accesskey_arg是url中的关键字参数;accesskey_signature是一个加密值,这里是一个由mypass和accessIP组成的字符串。
访问测试脚本下载:
1
2
3
4
5
6
7
<;?
$ipkey=md5("mypass"。$_SERVER['远程_ADDR']);
$output_add_key="<;ahref=http://www.example.cn/download/g3200507120520lm.rar?key="。$ipkey。">下载_添加_密钥</a>;<br/>;
$output_org_URL="<;ahref=http://www.example.cn/download/g3200507120520lm.rar>;下载_组织_路径</a>;<br/>;
echo$output_add_key;
echo$output_org_URL;
?>
访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403禁止错误。如果不怕麻烦,又能有条件实现,推荐使用NginxHttpAccessKeyModule。他的 *** 作方式是:比如我的下载目录里有一个file.zip。http://www.765h.com/download/file.zip使用ngx_http_accesskey_module模块后,对应的是http://www.765h.com/download/file.zip?的URI。Key=09093abeac094。只有给定的键值正确,才能在下载目录下下载file.zip。而且键值与用户IP相关,可以避免链盗。据说NginxHttpAccessKeyModule现在可以防雷电了。你可以试试。
本文大部分内容来自作者蛋粉的防盗链教程。
CC-NC-SA3.0获得许可。转载请注明出处。这篇文章的永久链接地址是http://www.85sb.com/155.html.
评论列表(0条)