Nginx 防盜鏈

AskaJohnny發表於2022-12-13

Nginx 防盜鏈

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

image-20221205135337893

概述

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

在瞭解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的資原始檔 , 也是可以展示的

image-20221205132512265

配置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 的資源 就不能訪問了

image-20221205133441066

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 只看返回頭資訊

image-20221205134817848

curl -e "" 指定 referer

image-20221205134908232

總結

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

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

歡迎關注個人公眾號

相關文章