[TOC]
## 防盗链处理
- 盗链概念
盗链是指在自己的页面上展示一些并不在自己服务器上的内容获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容
常见的是小站盗用大站的图片、音乐、视频、软件等资源
通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器
- 防盗链概念
防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的
资源,让绕开本站资源展示页面的资源链接失效
可以大大减轻服务器及带宽的压力
- 工作原理
通过 Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面
- Referer 方式防盗链
Nginx模块 `ngx_http_referer_module`用于阻挡来源非法的域名请求
Nginx指令 `valid referers`,全局变量`$invalid referer`
`valid_referers none I blocked I server_names,string`
```
none:" Referer"来源头部为空的情况
blocked:" Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以htp:/或者 https://开头.
server names:“ Referer"来源头部包含当前的 server names
```
```
location ~ .*\.(gifljpglpnglflvlswfrarlzips)${
valid_referers none blocked imooc.com * imooc.com:
if($invalid_referer){
#return 403:
rewrite ^/ http://www.imooc.com/403.jpg;
}
}
```
- 加密签名
伪造 Referer:可以使用加密签名解决
使用第三方模块` HttpaccesskeyModule`实现 Nginx防盗链
```
accesskey on off模块开关
accesskey_hashmethod md5 | sha-1签名加密方式
accesskey_arg GET参数名称
accesskey signature加密规则
```
```
location ~ .*\.(gifljpglpnglflvlswfrarlzips)${
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature"pwd11111$remote_addr; # pwd11111 加客户端 ip
}
```
```
$sign= md5('jason'. $_SERVER['remote_addr'];
echo '<img src=”./logo_new,png?sign=. $sign.'">';
```