Nginx 防盜鏈

2022-12-13 12:01:35

Nginx 防盜鏈

本篇主要介紹一下 nginx 中 防盜鏈的具體設定 , 以及http 的 referer 頭

概述

防盜鏈其實就是 防止別的站點來參照你的 資源, 佔用你的流量

在瞭解nginx 防盜鏈之前 我們先了解一下 什麼是 HTTP 的頭資訊 Referer,當瀏覽器存取網站的時候,一般會帶上Referer,告訴後端該是從哪個頁面過來的

nginx的 防盜鏈'功能基於 HTTP協定的Referer機制,通過判斷Referer對來源進行 識別和判斷 做出一定的處理

nginx會通就過檢視referer自動和valid_referers後面的內容進行匹配,如果匹配到了就將invalid_referer 變數置位1 , 如果沒有匹配到 , 則 將 invalid_referer變數置0 , 匹配的過程中不區分大小寫.

語法 valid_referers none blocked server_names string…
預設值
位置 server、location

Nginx 防盜鏈演示

這裡我拿圖片等資源 作為案例演示

未設定 防盜鏈的情況

如果你的圖片沒有做防盜鏈的控制 , 像如下設定一樣, 那麼其他人就可以直接使用你的檔案圖片等等

http {
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;


       server {
        listen       80;
        server_name  www.testfront.com;
				
        location ~* .(gif|jpg|png) {
           root /www/static;
        }

        location / {
            proxy_pass http://www.testbackend.com;
        }
    }

}

可以看到在其他機器上如 www.testbackend.com 直接引入 www.testfront.com的資原始檔 , 也是可以展示的

設定nginx防盜鏈

如果設定了valid_referers

nginx會通就過檢視referer自動和valid_referers後面的內容進行匹配,如果匹配到了就將invalid_referer 變數置位1 , 如果沒有匹配到 , 則 將 invalid_referer變數置0 , 匹配的過程中不區分大小寫.

    location ~* .(gif|jpg|png) {
       # 設定校驗 referer , 意思就是如果referer 是172.16.225.111 或者 www.testfront.com 都通過
       valid_referers 172.16.225.111 www.testfront.com;
       if ($invalid_referer) {
          return 403;
       }
       root /www/static;
    }

此時再存取 www.testbackend.com 去參照 www.testfront.com 的資源 就不能存取了

3. 防盜鏈的 具體設定

從上面可以看出, 通過設定 valid_referers 後面新增校驗的域名和ip , nginx 會自動進行 http的 referer 的匹配

防盜鏈除了可以設定 ip 域名外, 還能設定 如 none 和 blocked

  • none: 如果Header中的Referer為空,允許存取

  • blocked:在Header中的Referer不為空,但是該值被防火牆或代理進行偽裝過,如不帶"http://" 、"https://"等協定頭的資源允許存取。

  • server_names:指定具體的域名或者IP

    可以支援正規表示式和*的字串。如果是正規表示式,需要以~開頭表示

4.擴充套件Curl 存取

可以通過curl 直接進行存取 並且指定 referer 來快速測試

curl -i 只看返回頭資訊

curl -e "" 指定 referer

總結

本篇主要介紹了 nginx中如何設定 防盜鏈, 來限制別人隨意的參照你的資源 造成佔用你的網路資源情況, 設定還是畢竟簡單的.

歡迎大家存取 個人部落格 Johnny小屋
歡迎關注個人公眾號