nginx實現防盜鏈


有時候在瀏覽網頁的時候,會遇到某些文件(圖片等)無法訪問的情況,這是因為圖片的所有方做了防盜鏈機制

了解防盜鏈之前先了解下http referer這個屬性,http referer是請求頭中的一部分,當瀏覽器向web服務器發出請求時,一般會帶上這個屬性用來表明網頁的來源,比如我在qq空間里添加朋友的空間鏈接,那么當有人點擊我空間里的這個鏈接調到朋友的qq空間時,referer的值就是我空間的url。

防盜鏈的基本原理就是根據請求頭中referer屬性得到網頁來源,從而實現訪問控制。

為什么要實現防盜鏈?首先這些非法訪問並不會給網站帶來利益或好處,相反,這會浪費網站的帶寬,增加服務器的連接壓力,比如有些網站是按流量收費的,那么只要有人訪問了盜用圖片或其他文件的網站,網站就要支付這部分的流量費用。

以下是在nginx的實現方式:

1 基本方式(ngx_http_referer_module模塊)

 

第一行:定義了當訪問資源為gif/jpg/png/bmp文件

第二行:valid_referers這個關鍵字定義了白名單

第三行:invalid_referer是內置變量,通過判斷上一行中的valid_referers值會返回0或者1,

            none代表請求頭中沒有referer信息,這一般是直接在瀏覽器輸入圖片網址

            blocked代表被防火牆過濾標記過的請求

第四行:如果訪問來源不在白名單內,則返回403錯誤

第五行:可以通過設定指定的圖片來代替目標圖片

這種實現可以限制大多數普通的非法請求,但不能限制有目的的請求,因為這種方式可以通過偽造referer信息來繞過

2 使用http_accesskey_module模塊或lua腳本實現

原理如下:不通過referer信息判斷,通過約定url后的參數key的值(加密)來判斷是否是合法來源。


免責聲明!

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



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