有時候在瀏覽網頁的時候,會遇到某些文件(圖片等)沒法訪問的狀況,這是由於圖片的全部方作了防盜鏈機制html
瞭解防盜鏈以前先了解下http referer這個屬性,http referer是請求頭中的一部分,當瀏覽器向web服務器發出請求時,通常會帶上這個屬性用來代表網頁的來源,好比我在qq空間裏添加朋友的空間連接,那麼當有人點擊我空間裏的這個連接調到朋友的qq空間時,referer的值就是我空間的url。nginx
防盜鏈的基本原理就是根據請求頭中referer屬性獲得網頁來源,從而實現訪問控制。web
爲何要實現防盜鏈?首先這些非法訪問並不會給網站帶來利益或好處,相反,這會浪費網站的帶寬,增長服務器的鏈接壓力,好比有些網站是按流量收費的,那麼只要有人訪問了盜用圖片或其餘文件的網站,網站就要支付這部分的流量費用。瀏覽器
如下是在nginx的實現方式:服務器
1 基本方式(ngx_http_referer_module模塊)網站
第一行:定義了當訪問資源爲gif/jpg/png/bmp文件加密
第二行:valid_referers這個關鍵字定義了白名單lua
第三行:invalid_referer是內置變量,經過判斷上一行中的valid_referers值會返回0或者1,url
none表明請求頭中沒有referer信息,這通常是直接在瀏覽器輸入圖片網址htm
blocked表明被防火牆過濾標記過的請求
第四行:若是訪問來源不在白名單內,則返回403錯誤
第五行:能夠經過設定指定的圖片來代替目標圖片
這種實現能夠限制大多數普通的非法請求,但不能限制有目的的請求,由於這種方式能夠經過僞造referer信息來繞過
2 使用http_accesskey_module模塊或lua腳本實現
原理以下:不經過referer信息判斷,經過約定url後的參數key的值(加密)來判斷是不是合法來源。