首頁 > 軟體

nginx設定防盜鏈的三種實現方式總結

2022-06-11 14:03:25

什麼是資源盜鏈

資源盜鏈是指內容不在自己伺服器上,而通過技術手段,繞過別人的限制,將別人的內容,比如熱門的圖片放到自己頁面上,展示給使用者,以此來盜取別人網站的流量,即蹭流量。

簡而言之就是用別人的東西成就自己的網站

如下,分別在網上找的兩個圖片,可以直接在瀏覽器中開啟這2個連結

一、引導案例

接下來,利用上面的這兩個圖片連結,我們在nginx的資源目錄下,建立一個html頁面,將這兩張圖片的連結設定進去

如下有一個 a.html的頁面

在a.html的頁面中參照上面兩個圖片連結,內容如下:

啟動nginx服務,然後瀏覽器上存取a.html頁面,觀察圖片展示的效果

從展示的效果來看,第一張圖片可以正常展示,而第二張圖片則無法顯示,也就是說,第二張圖片的地址新增了防止盜鏈的功能;

二、Nginx防盜鏈實現原理

瞭解防盜鏈的原理之前,需要了解一下HTTP的頭資訊Referer這個引數;

當瀏覽器向web伺服器傳送請求的時候,一般都會帶上Referer,來告訴瀏覽器該網頁是從哪個頁面連結過來的;

後臺伺服器根據獲取到的這個Referer資訊,從而判斷是否為自己信任的網站地址,如果是則放行繼續存取,如果不是則可以返回403(伺服器端拒絕存取)的狀態資訊)

在本地模擬上述的伺服器效果如下:

三、Nginx防盜鏈具體實現

valid_referers

  • nginx會通過檢視referer自動和valid_referers後面的內容進行匹配;
  • 如果匹配到了就將i n v a l i d r e f e r e r 變 量 置 0 , 如 果 沒 有 匹 配 到 ,則將invalid_referer變數置為1;
  • 匹配的過程中不區分大小寫;

其他引數介紹:

  • none:如果Header中的Referer為空,允許存取;
  • blocked:在Header中的Referer不為空,但是該值被防火牆或代理進行偽裝過,如不帶"http://" 、"https://"等協定頭的資源允許存取;
  • server_names:指定具體的域名或者IP;
  • string: 可以支援正規表示式和*的字串。如果是正規表示式,需要以~
    開頭表示

實現方式一

1、在nginx的html目錄下建立一個images的目錄

2、在nginx.conf中新增如下設定

3、重啟nginx,存取下這張圖片

4、將這個圖片的路徑也設定到上面的 a.html中

5、重啟nginx之後再次存取a.html,可以正常存取

為了實現防盜鏈功能,只需要在上面的nginx.conf設定中新增如下內容

新增完畢,重啟nginx,再次存取該頁面,這時候可以看到,圖片就無法再存取了,這就實現了防盜鏈的功能

實現方式二

針對整個目錄進行設定

如果要設定的圖片很多的話,還可以針對整個目錄進行設定,可以參考如下:

然後在自定義的a.html中修改下圖片的路徑即可

再次存取頁面,也能達到上面的效果

實現方式三

從上面的效果來看,確實達到了防止盜鏈,但是在實際應用中,希望那些未展示出來的圖片顯示的更加友好點,可以結合rewrite的方式來做,下面來看具體的實現步驟

1、在網上找一張圖片並放到images目錄下

效果如下

2、修改nginx.conf組態檔

關鍵設定資訊如下,即將原來的返回403,使用rewrite指向特定的圖片即可

修改完畢後重啟nginx服務,再次存取上面的路徑,可以看到下面的效果

這樣也實現了防盜鏈的效果

總結

到此這篇關於nginx設定防盜鏈的三種實現方式的文章就介紹到這了,更多相關nginx設定防盜鏈內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com