Nginx — 防盜鏈配置

防盜鏈簡述

防盜鏈是一種保護網絡資源所有者權益的技術手段,旨在防止未經授權的用戶或網站通過直接鏈接的方式盜用資源,以下是關于防盜鏈的簡述:

原理

  • 基于請求頭驗證:服務器通過檢查請求頭中的特定字段,如Referer字段,來判斷請求是否來自合法的來源。如果Referer的值表明請求是從授權的域名發起的,服務器就允許訪問資源;否則,服務器可以拒絕提供資源或返回錯誤信息。
  • 加密與簽名:對資源的鏈接進行加密或添加簽名,使合法的請求能夠正確解析和訪問資源,而非法盜鏈的請求由于無法獲取正確的加密信息或簽名,無法正常訪問。例如,生成包含資源路徑、訪問時間等信息的簽名,服務器驗證簽名的有效性來確定請求是否合法。

常用方法

  • 設置Referer檢查:服務器端配置允許訪問的域名列表,只有當Referer頭中的域名在列表中時,才允許訪問資源。如在 Nginx 中,可通過valid_referers指令配置合法的Referer來源。
  • 使用 Token 驗證:為每個合法的資源請求生成一個唯一的令牌(Token),客戶端在請求資源時需要攜帶該令牌。服務器驗證令牌的有效性,以確定是否允許訪問。這種方法通常用于更嚴格的訪問控制場景,如 API 接口的防盜鏈。
  • IP 限制:根據客戶端的 IP 地址來限制對資源的訪問。服務器可以配置允許訪問的 IP 地址范圍,只有來自這些 IP 地址的請求才能訪問資源。但 IP 限制可能存在局限性,因為 IP 地址可能被偽造或動態分配。

作用

  • 保護資源所有者權益:防止他人未經授權使用資源,避免因盜鏈導致的帶寬浪費、存儲成本增加以及潛在的商業利益損失。例如,視頻網站的視頻資源若被大量盜鏈,會導致網站自身用戶體驗下降,同時影響廣告收入等商業利益。
  • 維護網站性能和穩定性:減少因非法盜鏈帶來的額外負載,確保服務器能夠穩定地為合法用戶提供服務。如果大量盜鏈請求占用了服務器帶寬和資源,可能會導致網站運行緩慢甚至崩潰,影響正常用戶的訪問。

防盜鏈配置方法

防盜鏈的配置方法有多種,以下是一些常見服務器環境下的防盜鏈配置示例:

Nginx 服務器

  • 基于 Referer 驗證
    • 首先在 Nginx 配置文件中,找到對應的server塊或location塊,添加valid_referers指令來指定合法的 Referer 來源。例如:

nginx

server {listen       80;server_name  example.com;location / {valid_referers none blocked example.com *.example.com;if ($invalid_referer) {return 403;}}
}
  • 上述配置中,valid_referers指定了允許的 Referer 來源,包括空 Referer、被截斷的 Referer 以及來自example.com及其子域名的 Referer。如果Referer不合法,if條件判斷會返回403 Forbidden錯誤。

  • 使用加密鏈接

    • 可以使用第三方模塊如ngx_http_auth_request_module來實現加密鏈接防盜鏈。首先需要安裝該模塊,然后配置如下:

nginx

server {listen       80;server_name  example.com;location /protected_resource {auth_request /auth;# 其他配置}location /auth {internal;# 這里可以配置與認證服務器的交互邏輯,例如驗證加密令牌等# 假設使用Lua腳本進行令牌驗證content_by_lua_block {local token = ngx.var.http_tokenif token == "valid_token" thenngx.status = ngx.HTTP_OKngx.exit(ngx.HTTP_OK)elsengx.status = ngx.HTTP_FORBIDDENngx.exit(ngx.HTTP_FORBIDDEN)end}}
}
  • 上述配置中,/protected_resource是需要保護的資源路徑,通過auth_request指令將請求轉發到/auth進行認證。在/auth?location 中,使用 Lua 腳本驗證請求頭中攜帶的加密令牌token,如果令牌有效則返回200 OK,允許訪問資源,否則返回403 Forbidden

Apache 服務器

  • 基于 Referer 驗證
    • 在 Apache 的配置文件(通常是httpd.conf或相關的虛擬主機配置文件)中,使用mod_rewrite模塊來實現基于 Referer 的防盜鏈。例如:

apache

<VirtualHost *:80>ServerName example.com<Directory /var/www/html>RewriteEngine On# 允許來自example.com及其子域名的RefererRewriteCond %{HTTP_REFERER} ^https?://(www\.)?example\.com [NC]RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/forbidden [NC]# 對于不合法的Referer,返回403錯誤RewriteRule .* - [F]</Directory>
</VirtualHost>
  • 上述配置中,RewriteEngine On開啟了重寫引擎,RewriteCond指令設置了兩個條件,第一個條件允許來自example.com及其子域名的 Referer,第二個條件排除了特定的不允許的路徑。如果 Referer 不滿足條件,RewriteRule會返回403 Forbidden錯誤。

  • 使用.htaccess 文件

    • 也可以在網站的根目錄下創建.htaccess文件來配置防盜鏈。例如:

apache

RewriteEngine On
# 允許來自example.com及其子域名的Referer
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?example\.com [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/forbidden [NC]
# 對于不合法的Referer,返回403錯誤
RewriteRule .* - [F]
  • 這種方式與在配置文件中配置類似,只是.htaccess文件可以更靈活地針對特定目錄進行配置,而無需修改全局的 Apache 配置文件。

IIS 服務器

  • 基于 URL 重寫模塊
    • 首先需要在 IIS 服務器上安裝 URL 重寫模塊。然后在網站的web.config文件中進行配置,例如:
  • 上述配置中,rewrite節點下的rule定義了防盜鏈規則。match元素匹配所有的 URL,conditions元素設置了允許的 Referer 條件,與 Apache 的配置類似。如果 Referer 不滿足條件,action元素會終止請求,返回403 Forbidden錯誤。

這些只是基本的防盜鏈配置方法,實際應用中可以根據具體需求進行調整和擴展。同時,防盜鏈技術也在不斷發展,還可以結合其他安全措施來提高資源的安全性。

一、防盜鏈配置通過文件進行限制(限制域名、IP)

實現思路:訪問http://192.168.72.130:9999/a.html 鏈接,a.html中配置有http://192.168.72.130:8888/aa.webp訪問aa.webp圖片的訪問鏈接,通過配置防盜鏈來實現房屋內控制。

步驟一:配置a.html內容

通過a.html文件里的頁面跳轉鏈接進行訪問,已經配置了跨域,詳見上一篇文章:Nginx — 跨域問題演示以及解決方法-CSDN博客

<html><head><meta charset="utf-8"><title>跨域問題演示</title><script src="jquery.js"></script><script>$(function(){$("#btn").click(function(){$.get('http://192.168.72.130:8888/getUser',function(data){alert(JSON.stringify(data));});});});</script></head><body><input type="button" value="獲取數據" id="btn"/><img src="http://192.168.72.130:8888/aa.webp" /><br/></body>
</html>

步驟二:配置訪問到a.html資源的nginx配置

server {listen      9999;server_name localhost;gzip on;root /opt/nginx;location / {index a.html;}
}

步驟三:配置aa.webp圖片資源訪問防盜鏈

1、將aa.webp圖片上傳到/opt/nginx/image目錄下,按照如下配置nginx。

server {listen      8888;server_name localhost;gzip on;location ~*\.(png|jpg|gif|webp){valid_referers none blocked www.baidu.com;if ($invalid_referer){return 403;}root /opt/nginx/image;}
}

2、進行訪問測試

瀏覽器輸入:http://192.168.72.130:8888/aa.webp

能正常進行訪問

步驟三:通過a.html鏈接跳轉進行訪問

瀏覽器輸入:http://192.168.72.130:9999/

?因為配置了防盜鏈,所以訪問失敗!!

步驟四:將網段放行

1、修改nginx配置

server {listen      8888;server_name localhost;gzip on;location ~*\.(png|jpg|gif|webp){#配置接收來自192.168.72網段的訪問valid_referers none blocked www.baidu.com 192.168.72.*;if ($invalid_referer){return 403;}root /opt/nginx/image;}
}

2、進行訪問測試

瀏覽器輸出:http://192.168.72.130:9999/?

訪問成功!!?

二、防盜鏈配置通過目錄進行限制(限制域名、IP)

步驟一:修改nginx的配置

server {listen      8888;server_name localhost;gzip on;location /image {valid_referers none blocked www.baidu.com 192.168.72.*;if ($invalid_referer){return 403;}root /opt/nginx;}
}

瀏覽器輸出:http://192.168.72.130:8888/image/aa.webp

訪問成功!!

步驟二:修改a.html中的鏈接

1、修改a.html中的配置

<html><head><meta charset="utf-8"><title>跨域問題演示</title><script src="jquery.js"></script><script>$(function(){$("#btn").click(function(){$.get('http://192.168.72.130:8888/getUser',function(data){alert(JSON.stringify(data));});});});</script></head><body><input type="button" value="獲取數據" id="btn"/><img src="http://192.168.72.130:8888/image/aa.webp" /><br/><a href="http://192.168.72.130:8888/image/centen.html">點擊這里訪問頁面</a><br/></body>
</html>

2、在/opt/nginx/image目錄下添加centen.html文件

?步驟三:訪問測試

瀏覽器輸出:http://192.168.72.130:9999/?

?

總結:

通過目錄訪問限制的方法可以將不同的資源放到對應的目錄下這樣可以實現對資源的控制統一控制。?

三、第三方模塊ngx_http_accesskey_module 補充?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79560.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【淺學】Windows下ffmpeg+nginx+flv將本地視頻推流在本地搭建的Web前端頁面中播放,超詳細步驟

Nginx安裝和配置 下載nginx-1.19.3-http-flv 模塊預編譯包并解壓放在d盤&#xff0c;路徑就跟安裝步驟里說的一樣(如下圖)&#xff0c;不然會有其他問題出現。 打開conf/nginx.conf&#xff0c;查看RTMP和http相關的配置&#xff0c;確認端口號和路由名稱 ffpemg推流視頻…

Ubuntu-tomcat安裝部署

https://blog.csdn.net/weixin_43877427/article/details/144697087 Linux下Tomcat安裝與配置_tomcat linux安裝及配置教程-CSDN博客 一、下載Tomcat 1、官網下載 進入后根據自己需要選擇不同的版本&#xff0c;點擊download 進入后&#xff0c;在下圖標注的里邊選擇要下載…

希洛激活器策略思路

在復雜多變的外匯市場中&#xff0c;交易者常常尋求有效的工具來輔助決策。 希洛激活器作為一種綜合性的技術指標&#xff0c;結合了江恩理論、CCI&#xff08;商品通道指數&#xff09;和MACD&#xff08;移動平均收斂發散指標&#xff09;&#xff0c;旨在為交易者提供更為全…

n8n工作流自動化平臺的實操:本地化高級部署

一、本地高級部署 1.下載 docker pull docker.n8n.io/n8nio/n8n 2.運行 docker volume create n8n_data docker run -dit --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIEfalse -e N8N_RUNNERS_ENABLEDtrue -e N8N_ENFORCE_SETTINGS_FIL…

vector和string的迭代器

1. 迭代器的本質 (1) 標準要求 C 標準要求 std::string 和 std::vector 的迭代器必須是 隨機訪問迭代器&#xff08;Random Access Iterator&#xff09;。 指針天然滿足隨機訪問迭代器的所有操作&#xff08;如 、--、n、* 等&#xff09;&#xff0c;因此可以直接用指針實現…

PyCharm代理配置全攻略:系統設置+Python運行環境一鍵搞定

文章目錄 1. 設置系統代理1.1 作用范圍1.2 使用場景1.3 設置步驟 2. 設置 python 運行/調試代理2.1 作用范圍2.2 使用場景2.3 設置步驟 Pycharm 工具作為一款強大的 IDE&#xff0c;其代理配置在實際開發中也是必不可少的&#xff0c;下面介紹下如何配置 Pycharm 的代理。 1. …

stm32 g031g8 flash擦除函數被坑

先記錄一下在擦除的時候由于調用了這個FLASH_PageErase(FLASH_BANK_1, secpos); 導致擦除不成功&#xff0c;寫入失敗。 下面的擦除有問題// 使用 FLASH_PageErase 擦除該頁while ((FLASH->SR & FLASH_SR_BSY1) ! 0); // 等待空閑FLASH_PageErase(FLASH_BANK_1, secpo…

深度學習與 PyTorch 基礎

筆記 1 深度學習簡介 1.1 深度學習概念 深度學習是機器學習的一類算法, 以人工神經網絡為結構, 可以實現自動提取特征 深度學習核心思想是人工神經網絡為結構, 自動提取特征 1.2 深度學習特點 自動提取特征 解釋性差 大量數據和高性能計算能力 非線性轉換(引入非線性因…

【Unity】XLua訪問C#文件

創建NPC.cs&#xff1a; public class NPC { public string name; public int age; public void Say() { Debug.Log("Say:我是未被修改的"); } public static void Say() { Debug.Log("Static Say:我是未被修改的"); } public void Say2(int a) { Debug.Lo…

【第十六屆藍橋杯省賽】比賽心得與經驗分享(PythonA 組)

文章目錄 一、我的成績二、我的備賽經歷三、如何備賽&#xff08;個人觀點&#xff09;1. 基礎語法2. 數據結構3. 算法4. 數學 四、做題技巧與注意事項五、我的題解試題A 偏藍 &#x1f3c6;100%試題B IPV6 &#x1f3c6;0%試題C 2025圖形 &#x1f3c6;100%試題D 最大數字 &am…

基于Springboot+Mysql的校園博客系統(含LW+PPT+源碼+系統演示視頻+安裝說明)

系統功能 管理員功能&#xff1a;首頁、個人中心、博主管理、文章分類管理、文章信息管理、舉報投訴管理、系統管理&#xff1b;博主功能&#xff1a;首頁、個人中心、文章信息管理、舉報投訴管理、我的收藏管理&#xff1b;前臺首頁功能&#xff1a;首頁、文章信息、系統公告…

第三次作業(密碼學)

#include <stdio.h> #include <stdlib.h> // 計算最大公約數 int gcd(int a, int b) { while (b ! 0) { int temp b; b a % b; a temp; } return a; } // 計算模冪運算 int mod_pow(int base, int exponent, int modulus) { …

3.0/Q1,Charls最新文章解讀

文章題目&#xff1a;Association between outdoor artificial light at night and metabolic diseases in middle-aged to older adults-the CHARLS survey DOI&#xff1a;10.3389/fpubh.2025.1515597 中文標題&#xff1a;夜間戶外人工光與中老年人代謝性疾病的關聯-CHARLS調…

MATLAB 中zerophase函數——零相位響應

零相位響應&#xff08;Zero-Phase Response&#xff09;是指濾波器的幅度函數&#xff0c;但相位為零。濾波器的相位響應為零&#xff0c;意味著不同頻率的信號通過濾波器后&#xff0c;其相位不發生任何變化&#xff0c;即信號的波形在時間軸上沒有偏移。 零相位響應指的是當…

馬克思最基本的哲學思想--改造世界以實現人的自由全面發展--deepseek

馬克思的哲學思想可以概括為“改造世界以實現人的自由全面發展”&#xff0c;這句話看似簡單&#xff0c;卻包含了其哲學的核心邏輯。我們可以從三個層面展開分析&#xff1a; 1. “改造世界”——實踐是哲學的終極使命 馬克思在《關于費爾巴哈的提綱》中寫道&#xff1a; “哲…

JAVA學習-練習試用Java實現“一個簡單的文本摘要系統 :基于關鍵詞提取或句子摘要”

問題&#xff1a; java語言編輯&#xff0c;實現一個簡單的文本摘要系統 &#xff1a;基于關鍵詞提取或句子摘要。 解答思路&#xff1a; 實現一個簡單的文本摘要系統&#xff0c;我們可以采用基于關鍵詞提取的方法。以下是一個簡單的Java實現&#xff0c;使用TF-IDF&#xff0…

案例解析:基于量子計算的分子對接-QDOCK(Quantum Docking)

分子對接&#xff08;Moleculardocking&#xff09;在藥物發現中具有重要意義&#xff0c;但對接的計算速度和準確率始終難以平衡&#xff0c;其巨大解搜索空間對傳統計算機來說異常艱巨。 本文通過引入網格點匹配&#xff08;GPM, Grind point matching&#xff09;和特征原子…

【Mytais系列】Datasource模塊:數據源連接

MyBatis 的 DataSource 模塊是框架與數據庫交互的核心基礎設施&#xff0c;負責管理數據庫連接的創建、分配、釋放及池化&#xff0c;直接影響 SQL 執行效率和資源利用率。以下是其核心內容、功能及在 SQL 執行中的作用詳解&#xff1a; 一、DataSource 模塊的核心組件 組件 功…

React 組件prop添加類型

給函數的props做注解 import { useState } from reacttype Props { className:string,title?:string } // 自定義一個Button組件 function Button(props:Props){// 解構出classname\const {className} propsreturn <button className{className}>點擊我</button&g…

MCP多智能體消息傳遞機制(Message Passing Between Agents)

目錄 &#x1f680; MCP多智能體消息傳遞機制&#xff08;Message Passing Between Agents&#xff09; &#x1f31f; 為什么要引入消息傳遞機制&#xff1f; &#x1f3d7;? 核心設計&#xff1a;Agent間消息傳遞模型 &#x1f6e0;? 1. 定義標準消息格式 &#x1f6e…