Nginx防盜鏈


為什么要配置防盜鏈

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

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

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

 

 

綜上,為了防止B這一類人的不法侵害,需要使用防盜鏈進行防護

配置防盜鏈的方法

要實現防盜鏈,需要了解HTTP協議中的請求頭部的Referer頭域和采用URL的格式表示訪問當前網頁或者文件的源地址。通過該頭域的值,我們可以檢測到訪問目標資源的源地址。這樣,如果我們檢測到Referer頭域中的值並不是自己站點內的URL,就采取阻止措施,實現防盜鏈。

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。

示例

#匹配文件類型
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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM