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.mzph.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…