Nginx防盜鏈

爲何要配置防盜鏈

  • A是某一網站站長,A網站中的圖片和音頻視頻連接等靜態資源都保存在對象存儲OSS上或者本地。服務器

  • B是另外一網站的站長,B在未經A容許的狀況下使用A網站的圖片資源,放置在本身網站的網頁中,經過這種方法盜取空間和流量。這樣的狀況下,第三方網站用戶看到的是B網站,但並不清楚網站裏的圖片來源。網站

  • OSS是收費的,這樣用戶A在沒有獲取任何收益的狀況下,反而承擔了資源使用費用,而且B在沒有通過容許的狀況下適用這些資源也是侵害了A的合法權益。

 

 

綜上,爲了防止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

相關文章
相關標籤/搜索