HTTP Referer是Header的一部分,當瀏覽器向Web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的,服務器藉此能夠得到一些信息用於處理,html
例如防止未經容許的網站盜鏈圖片、文件等。所以HTTP Referer頭信息是能夠經過程序來假裝生成的,因此經過Referer信息防盜鏈並不是100%可靠,可是,它可以限制大部分的盜鏈nginx
狀況。web
該指令"valid_referers"的語法:
valid_referers [none|blocked|server_names] ...
默認值:none
使用環境:server,location
該指令會根據Referer Header頭的內容分配一個值爲0或1給變量$invalid_referer。若是Referer Header頭不符合valid_referers指令設置的有效Referer,變量$invalid_referer將被設置爲1.chrome
該指令的參數能夠爲下面的內容:
none:表示無Referer值的狀況。
blocked:表示Referer值被防火牆進行假裝。
server_names:表示一個或多個主機名稱。從Nginx 0.5.33版本開始,server_names中可使用通配符"*"號。瀏覽器
目的:服務器
一、讓資源只能在個人頁面內顯示網站
二、不能單獨來取或者下載url
流程:spa
一、chrome以url1首次請求web服務器,獲得html頁面。code
二、chrome再次發起url2資源請求,攜帶referers = url1。(注意,是url1,不是本次的url2)
三、nginx校驗referers值,決定是否容許訪問。
四、下面是nginx校驗referers值的過程:
valid_referers:匹配域名白名單,若是不匹配,把內置變量$invalid_referers置爲1,進入if塊,返回404
location ^~ /mall { valid_referers *.enjoy.com; if ($invalid_referer) { return 404; } root html/gzip; }