A是某一網站站長,A網站中的圖片和音頻視頻連接等靜態資源都保存在對象存儲OSS上或者本地。服務器
B是另外一網站的站長,B在未經A容許的狀況下使用A網站的圖片資源,放置在本身網站的網頁中,經過這種方法盜取空間和流量
。這樣的狀況下,第三方網站用戶看到的是B網站,但並不清楚網站裏的圖片來源。網站
綜上,爲了防止B這一類人的不法侵害,須要使用防盜鏈進行防禦spa
配置防盜鏈的方法代理
要實現防盜鏈,須要瞭解HTTP協議中的請求頭部的Referer頭域
和採用URL的格式表示訪問當前網頁或者文件的源地址。經過該頭域的值,咱們能夠檢測到訪問目標資源的源地址。這樣,若是咱們檢測到Referer頭域
中的值並非本身站點內的URL,就採起阻止措施,實現防盜鏈。code
Nginx的valid_referers能夠配置相關防盜鏈的行爲視頻
**Syntax: valid_referers none | blocked | server_names | string ...; Default: — Context: server, location #搜索匹配不區分大小寫 Parameters can be as follows: none #檢測Referer頭域不存在的請求 blocked #檢測Referer頭域的值被防火牆或者代理服務器刪除或假裝的狀況,這種狀況頭域不以http:// https:// 開頭 server_names #設置一個或多個URL,檢測Referer頭域的值是不是這些URL中的某個 arbitrary string #定義一個服務器名稱和一個可選的URI前綴。服務器名能夠在開頭或結尾有「*」。檢查時,「Referer」字段中的服務器端口被忽略
這些語法含義指的是,valid_referers配置白名單對請求的頭域進行匹配,匹配的值就是$invalid_referer
,根據得到的這個值,進行if
條件判斷,而後進行rewrite。
server
示例對象
#匹配文件類型 location ~* \.(gif|jpg|png|jpeg|flv|swf|rar|zip)$ { expires 30d; #容許文件鏈出的域名白名單,域名之間空格隔開 valid_referers none blocke *.A.com www.A.com; #if判斷爲真 if ($invalid_referer) { #防盜鏈圖片替換全部盜鏈圖片 rewrite ^/ http://www.A.com/404.jpg; } }
none、blocked
刪除rewrite
成圖片,也能夠是連接完成防盜鏈配置,能夠在請求頭裏面看到Host頭的指向,會只看到A.com。blog