当前位置: 首页 > news >正文

nginx配置防盗链入门

什么是“防盗链”?

•	盗链:别人不经过你的网站,直接在他们的网站或 App 里引用你服务器上的图片、视频、文件资源。
•	例如:你的网站 img.example.com/logo.png,被别的网站 <img src="http://img.example.com/logo.png"> 调用。
•	结果是 别人省了流量,损耗却在你这边(带宽被占,服务器压力大)。
•	防盗链:通过技术手段限制资源访问,只允许 合法来源(Referer 正确) 的请求获取文件,非法来源的请求返回 403 Forbidden 或替代图片。

为什么要用在 Nginx?

Nginx 经常用来做 静态资源服务器 / 反向代理 / CDN 边缘节点。
为了节省带宽和保护资源,Nginx 提供了 Referer 校验 和 签名 URL(secure_link 模块) 来实现防盗链。

本机环境测试

配置先实现动静分离:

  • 本机(172.20.10.10:8080) 跑一个web程序, 但是静态资源入css,img不部署在这个服务器上

在这里插入图片描述

  • 从本地访问这个页面, css和img 找不到很正常, 而且真实情况下, 连这个页面也访问不了, 而是通过反向代理 代理到这个页面
    在这里插入图片描述

  • 172.16.246.201这个机子放静态资源,实现动静分离
    在这里插入图片描述
    配置核心配置文件(只实现动静分离不配置防盗链)

server {listen       80;server_name  localhost;location /  {proxy_pass http://172.20.10.10:8080;}location ~*/(css|img) {root /usr/share/nginx;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
  • 解释: 当请求路径以 /css 或 /img 开头(不区分大小写)时,就从 /usr/share/nginx 目录下读取对应的文件。

  • location 前缀

/通用匹配,任何请求都会匹配到
=精准匹配,不是以指定模式开头
~正则匹配,区分大小写
~*正则匹配,不区分大小写
^~非正则匹配,匹配以指定模式开头的location
  • location匹配顺序
    多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
    普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
    当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
    所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

配置成功后,通过反向代理的方式访问172.16.246.201
在这里插入图片描述

在这里插入图片描述

配置防盗链

防盗链配置valid_referers none | blocked | server_names | strings ....;
none, 检测 Referer 头域不存在的情况。
blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以 “http://” 或 “https://” 开头。
server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
引入

在这里插入图片描述

返回状态码的防盗链

此配置为:允许 referer 为172.16.246.201 或者不携带 referer

server {listen       80;server_name  localhost;location /  {proxy_pass http://172.20.10.10:8080;}location ~*/(css|img) {root /usr/share/nginx;valid_referers none 172.16.246.201;if ($invalid_referer){return 403;}}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
测试 在开一个172.16.246.202, 反向代理到172.16.246.201 这个服务器
server {listen       80;server_name  localhost;location / {proxy_pass http://172.16.246.201;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

在这里插入图片描述

返回图片的防盗链
	server {listen       80;server_name  localhost;location /  {proxy_pass http://172.20.10.10:8080;}location ~*/(css|img) {root /usr/share/nginx;valid_referers none 172.16.246.201;if ($invalid_referer){return 403;}}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}error_page 403 /403.png;location =/403.png{root /usr/share/nginx/img;}
}

在这里插入图片描述

盗用资源就会重定向到自己定义的图片

在这里插入图片描述

用curl命令测试, 可以携带自定义的 referer
curl -I -e "http://exaple.com"  http://target.com
-I : 只返回头信息
-e : 指定携带的referer

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/394156.html

相关文章:

  • Kafka 多机房、跨集群复制、多租户、硬件与操作系统、全栈监控
  • leetcode136.只出现一次的数字
  • 力扣hot100:环形链表II(哈希算法与快慢指针法思路讲解)
  • 【算法】【Leetcode】【数学】统计1的个数 数位统计法
  • Kafka面试精讲 Day 21:Kafka Connect数据集成
  • MySQL 主从复制完整配置指南
  • 力扣每日一刷Day 23
  • LeetCode 53. 最大子数组和(四种解题思路)包含扩展返回最大和的数组
  • RTX 4090助力深度学习:从PyTorch到生产环境的完整实践指南——高效模型训练与优化策略
  • 23种设计模式之【桥接模式】-核心原理与 Java实践
  • LabVIEW手部运动机能实验
  • 669. 修剪二叉搜索树
  • 大QMT自动可转债申购
  • PolarCTF PWN 网络安全2023秋季个人挑战赛刷题
  • MySQL-day4_02(事务)
  • JUC(8)线程安全集合类
  • springboot中@EnableAsync有什么作用
  • Spark专题-第二部分:Spark SQL 入门(6)-算子介绍-Generate
  • C#练习题——Dictionary
  • Feign
  • SPA小说集之三《森林城市反甩锅战:ERP的权责边界》
  • Qt(模态对话框和非模态对话框)
  • 【无标题】物联网 frid卡控制
  • 【LLM LangChain】 模型绑定工具+调用工具(手动调用/LangGraph/AgentExecutor)+相关注意事项
  • 图神经网络(GNN)入门:用PyG库处理分子结构与社会网络
  • 【C++】编码表 STL简介:STL是什么,版本,六大组件,重要性以及学习方法总结
  • show_interrupts函数的进一步解析及irq_desc结构体
  • Kafka面试精讲 Day 19:JVM调优与内存管理
  • 10.vector容器
  • Linux系统介绍