[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.'">';
```