首先,咱們須要知道經過什麼來實現防盜的!html
http referer 是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上referer,這是在告訴服務器是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理;nginx
location /photos/ { valid_referers none blocked 域名/IP; if ($invalid_referer) { return 403; } }
Http Referer 模塊的功能有:web
valid_referers :該指令會根據瀏覽器Referer header頭的內容分配一個值0或1給變量$invalid_referer ;瀏覽器
若是referer header 頭不符合valid_referers指令設置的有效referer,變量$invalid_referer將被設置爲1,那麼便會執行if模塊中的內容;服務器
該指令的參數有:spa
none :默認值,表示沒referer值(直接訪問防盜鏈中的內容)的狀況;server
blocked :表示referer值被防火牆假裝;htm
server_names :表示一個或者多個主機名稱,從nginx0.5.33版本開始,server_names中可使用通配符*;blog
咱們經過一個例子來更深徹的來了解一下防盜鏈吧!圖片
location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv)$ { valid_referers none blocked 域名/IP; if ($invalid_referer) { rewrite ^/ http://www.afeige.cn/404.html; #return 404; } }
第一行:表示對以 gif|jpg|jpeg|png|bmp|swf|flv 結尾的文件進行防盜鏈;
第二行:表示對 域名/IP 這個來路進行判斷
if{}裏面內容的意思是,若是來路不是指定來路就跳轉到錯誤頁面,固然直接返回404也是能夠的呀!
若 valid_referers none blocked 域名/IP; 中,none 存在;那麼在瀏覽器直接訪問域名下的該文件依然也能夠訪問
爲了達到即便在瀏覽器中輸入正確的圖片路徑,也不容許訪問的狀態;那麼把none刪除掉就Ok了!
成功的路老是愈來愈窄,而後愈來愈寬。若是輕易就成功了豈不是沒意思了。