nginx 实现图片防盗链功能

2023-05-16

在搜索浏览网页的时候,发现一篇文章是从我的个人网站转载的,但是没有注明出处,文章中的图片也没有本地化处理,还是从我的服务器请求,这就无形中增加了我的服务器的开销,于是有了设置防盗链功能这一想法。

想干就干,开工!

防盗链原理


防盗链的原理其实很简单,目前比较流行的做法就是通过Referer来进行判断和限制。

什么是 Referer


Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

通俗来说,假如我通过 Google 搜索去搜索referer,然后搜索引擎给出了一堆链接,这个时候,我点击链接,那么 http 头就会带上 referer 字段信息,并且值就是 Google 搜索的 url 地址https://www.google.com;因此,假设从 A 网址到 B 网址,那么这个 referer 字段就告诉 B网址该请求是从 A 网址发起的。

这里我们需要用到ngx_http_referer_module模块和$invalid_referer变量,请看下面进一步解释。

ngx_http_referer_module模块


ngx_http_referer_module模块用于阻止对“Referer”头字段中具有无效值的请求访问站点。应该记住,使用适当的“Referer”字段值来构造请求非常容易,因此本模块的预期目的不是要彻底阻止此类请求,而是阻止常规浏览器发送的请求的大量流量。还应该考虑到,即使对于有效请求,常规浏览器也可能不发送“Referer”字段。

语法:valid_referers none | blocked | server_names | string ...;
可用于:server,location
可以看到valid_referers指令中存在一些参数,比如none|blocked,含义如下:

none:请求标头中缺少“Referer”字段,也就是说Referer为空,浏览器直接访问的时候Referer一般为空。
blocked: Referer”字段出现在请求标头中,但其值已被防火墙或代理服务器删除; 这些值是不以“http://” 或 “https://” 开头的字符串;
server_names: 服务器名称,也就是域名列表。
$invalid_referer变量
我们设置valid_referers 指令后,会将其结果传递给一个变量$invalid_referer,其值为0或1,可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有包含Referer头的值,$invalid_referer将被设置为1。

设置防盗链白名单
白名单就是只允许白名单内的域名访问,其余一律禁止。

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers none blocked *.devler.cn;
    if ($invalid_referer) {
        return 403;
    }
}

上面的配置含义是先用location匹配出需要的格式(图片和视频),然后用valid_referers指令设置允许的域名,其它域名没有包含在valid_referers列表中,$invalid_referer变量返回的值为1,最终返回403,禁止访问。以上就是防盗链白名单的设置。

防盗链黑名单

黑名单与白名单正好相反,就是只禁止黑名单中的域名请求,其余一律放行,相比白名单,黑名单的限制更加宽松。网上大部分教程只提到了防盗链白名单的设置,了解原理后黑名单的设置方法也差不多。


location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers *.baidu.com;
    if ($invalid_referer = 0) {
        return 403;
    }
}  

上面的配置中我们用valid_referers指令设置黑名单域名*.baidu.com,获取到指定的Referer头之后,$invalid_referer返回值为0,最终返回403,禁止百度的域名来访问。

我的具体做法


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|avif|webp|mp4)$
    {
        valid_referers none blocked *.ivu4e.com ivu4e.com;
        set $flag "0";
	if ($invalid_referer) {
          #return 403;
          set $flag "1";
        }
        if ($request_uri = "/403img.png") {
          set $flag "0";
        }
        if ($flag = "1") {
          #return 403;
          return 302 https://ivu4e.com/403img.png;
        }
        expires      30d;
        error_log off;
        access_log off;
    }  

对所有的图片视频设置白名单功能,

但是,不在白名单中的话,我不会返回403,

而是返回302,然后转向到一张指定的图片;

效果:

本文首发在我的个人网站:nginx 实现图片防盗链功能_无知

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 实现图片防盗链功能 的相关文章

  • 人脸识别损失函数简介与Pytorch实现:ArcFace、SphereFace、CosFace

    总结成一句话就是 xff1a 在softmax基础上 xff0c 对最后一层全连接的权重和输入特征进行归一化 xff0c 重新放缩到半径为s的超平面 xff0c 增加惩罚的margin训练 xff0c 使得类型紧凑 xff0c 类间变得远离
  • 这或许是个新的开始吧

    其实上大学到现在很多时候我都很迷茫 xff0c 内心有很多感想和体会 xff0c 有时会想着去把它写下来 xff0c 却又在拿起笔的时候退缩 现在我是大二的下学期末 xff0c 回顾这两年的自己 xff0c 或许我比许多同学差很多 xff0
  • 信息化VS数字化

    1 信息化更偏系统建设 xff0c 数字化更偏业务 2 信息化更偏稳态 xff0c 数字化更偏敏态变革 3 信息化更偏流程管理 xff0c 数字化更偏业务赋能 4 信息化更偏流程 xff0c 数字化更偏数据 5 信息化是管理视角 xff0c
  • ?跟谁学_极简英语——公开课01作业

    作业 xff1a 将下列句子的六成分用删除线划掉 xff0c 并翻译出来 1 I hava many letters to write 2 We met a group of pupils 小学生 returning from school
  • ?跟谁学_极简英语——公开课02作业

    作业 xff1a 找出句子的悬挂结构 xff0c 并翻译句子 1 Lin Tao a 14 yeas old schoolboy still didn t show up at school 2 I play tennis with my
  • grafana如何修改默认端口【3000】

    grafana修改默认端口为80后 xff0c 启动会报 bind permission denied 解决方法 xff1a xff08 三种方式 xff09 授予grafana二进制权限 xff08 推荐使用 xff09 span cla
  • 分享【免费】【英语听力】&【背单词】练习网站和微信小程序 博主:杨中科

    内容丰富 xff0c 贴近实战 xff0c 值得一试 英语听力 xff1a https www youzack com 背单词 xff1a https bdc youzack com Recitation Home ChooseDictio
  • connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    docker 守护进程未启动 xff0c 无法使用docker命令 span class token punctuation span root 64 grafana253 span class token punctuation span
  • Win10上Docker无法正常启动 出现install WSL2 kernel update的情况

    文章目录 一 情况描述 二 解决方法 2 1检查自己的Win10版本 2 2下载插件 三 最终效果 写在最后 一 情况描述 当装完docker之后 xff0c 系统提示Windows重新启动 xff0c 作者就重启系统准备使用docker
  • 【JVM规范】2.5.JVM运行时数据区 Run-Time Data Areas

    2 5 运行时数据区Run Time Data Areas JVM为程序执行定义了不同的运行时数据区 xff08 run time data areas xff09 一部分运行时数据区在JVM启动时创建 xff0c JVM退出时被销毁 另一
  • for in遇到的bug

    项目场景 xff1a 由于ie不兼容getElmentsByClassName获取元素 xff0c 所以我自己封装该方法 xff1a ie支持ID与TagName获取元素 问题描述 xff1a 提示 xff1a 这里描述项目中遇到的问题 x
  • 使用C#进行点对点通讯和文件传输(发送接收部分)

    上面介绍了通讯的基类 xff0c 下面就是使用那个类进行发送和接收的部分 xff1a 二 发送部分 xff1a 发送咱们使用了多线程 xff0c 可以同时进行多个任务 xff0c 比如发送文件 发送文本等 xff0c 互不影响 xff1a
  • 这些日子我读过的《java编程思想》

    来到这里实习的时候 xff0c 就准备多读几本书 xff0c 其中第一本就是 Java编程思想 xff0c 后续还会读一些 代码大全 算法导论 之类的书籍 不过这一次通过阅读 java编程思想 xff0c 我收获了实在太多了 xff0c 现
  • CMMI2.0和CMMI1.3有什么区别?

    CMMI资质认证想必已经有不少企业已经了解过了 xff0c 很多企业只了解到CMMI的基础知识 xff0c 却不明白CMMI也有不同的版本 xff0c CMMI1 3版本自动20年10月更改为2 0版本 xff0c 那CMMI的一个版本升级
  • CMMI2.0和1.3之间的区别有哪些?

    CMMI资质认证已经有很多年的历史了 xff0c CMMI的版本也发生了变化 xff0c 从最初的1 3版本演变成至今2 0版本 xff0c 现在的企业在办理的时候使用也都是2 0版本 xff0c 那么这两者之间的变化是什么 xff1f 区
  • Python str isalpha方法

    目录 描述 语法 举例 1 字符串中只包含字母 2 字符串包含数字 符号和字母 描述 isalpha函数检测字符串中是否只包含字母 如果全部是字母组成的字符串 xff0c 则返回True xff0c 否则返回False isalpha 函数
  • Caffe 完全安装指南(GPU) 上

    目录 0 写在前面1 Caffe依赖包安装1 1 ProtoBuffer1 2 Boost1 3 GFLAGS1 4 GLOG1 5 BLAS1 6 ZLIB1 7 HDF51 8 LMDB和LEVELDB1 9 Snappy1 10 Op
  • 质数因子的求解

    质因子 xff08 或质因数 xff09 在数论里是指能整除给定正整数的质数 根据算术基本定理 xff0c 不考虑排列顺序的情况 下 xff0c 每个正整数都能够以唯一的方式表示成它的质因数的乘积 下面求解某一个数的质因子的情况 1 分解为
  • 常见的液晶显示模块类型

    随着市场的发展 人们更加倾向于产品的人机交互对话功能 能够实现交互的方式很多 xff0c 作为对交互界面的各种显示器液晶液晶模块以其低功耗 易控制受到设计者的青睐 于是各种型号 功能的液晶模块涌入市场 xff0c 这就需要对其进行综合及比较
  • 如何在ubuntu系统中安装gnome界面

    首先 xff0c 你需要进入ubuntu系统 xff0c 然后打开终端 然后需要这样操作 xff1a 1 更新软件源 sudo apt get update sudo apt get upgrade y 2 安装Tasksel sudo a

随机推荐

  • 使用 podman 将容器作为 systemd 服务运行

    前置环境要求 xff1a 需要以 CRI O 作为容器运行时 安装 CRI O 及配置国内容器镜像加速器请参考 xff1a 使用 CRI O 容器引擎 本文介绍了如何使用 podman 初始化 systemd 服务 xff0c 以两种不同的
  • VNC远程桌面到linux,提示connection refused(10061)解决办法

    确认server端的VNC服务开启 xff0c service vncserver start xff0c 检测状态时ok的 ps ef grep vnc xff0c 来查看不是已经开启多个vnc连接 如果有多个vnc连接 xff0c 使用
  • nginx前端,tomcat后端服务器获取客户的真实IP,包括tomcat访问日志获取真实IP的配置

    在安装完以nginx 43 tomcat的WEB服务器 xff0c 使用默认的配置 xff0c 会导致服务器上的日志文件 xff0c 只有nginx日志能获取到客户的真实IP xff0c 而tomcat以及上面的JAVA WEB应用均不能正
  • 腾讯自研交换机系统优化之路

    一 Tencent NOS概述 SONiC is an open source network operating system based on Linux that runs on switches from multiple vend
  • vue-cli 插件开发补充

    官网地址 xff1a https cli vuejs org zh api地址 xff1a https cli vuejs org dev guide plugin api html Plugin API api version 64 vu
  • ubuntu 安装开发工具

    因为各种原因 又回到了Ubuntu系统 以后开始会陆续记些笔记 注意要点 选择ubuntu16 能自动识别新机型的物理硬件 集成了较新较全的驱动 比如网卡和声卡驱动都有 最主要是这两个 没有这两个就上不了网 听不到声音 解决很费时间 安装系
  • ubuntu vscode 使用clang-format and editor 插件序列化代码

    在使用vscode时 xff0c 可以加入插件 xff0c 在写代码的时候自动格式化代码 xff0c 对编码风格做一个自动化的处理 xff0c 这样会使同一个部门使用同一种规格编码 xff0c 在review代码时会很轻松 这里使用一键化的
  • 记录生活,记录学习----我的2016

    过着2017年的日子 xff0c 思考着2016年人生的变化 xff0c 或许 xff0c 最大的变化是懂得记录学习 xff0c 记录生活吧 2016年 xff0c 博客进入了我的生活 xff0c 从年初的寥寥数篇博客 xff0c 到现在C
  • 《Learning Deep Features for Discriminative Localization》——CAM热力图翻译及划重点

    摘要 在这项工作中 xff0c 我们重新审视了 Network in network 中提出的全局平均 池化层 xff08 global average pooling xff09 xff0c 并阐明了它是如何通过图片标签就能让卷积神经网络
  • VS2019的C++项目如何查看源文件(.h,.cc.cpp等)所在的工程

    在大型的C 43 43 项目中 xff0c 一个解决方案有多个 vcxproj工程文件 每个工程文件里又有很多源文件 xff0c 比如 xff1a 8071个项目 xff0c 文件数则更多 xff0c 因此 xff0c 当你打开一个源文件时
  • csdn排名出了Bug了?一场因排名引发的血案!

    一石激起千层浪 xff0c 排名让人很彷徨 xff01 很多人已经注意到了 xff0c 博客的排名出现了非常大的变化 xff01 不只是排名 xff0c CSDN最近的动作可是很频繁 xff0c 让我们来细数CSDN那些改变 但是 xff0
  • CSDN博主排名更新,看看原来的前1000名博主现在的排名如何

    CSDN博主排名更新 xff0c 看看新规则 原来的排名参考 xff1a CSDN前1000名博主 博客原排名新排名stpeace 1 25yuanmeng001 2 143yjclsx 3 72phphot 4 427833Augusdi
  • 程序员的求爱日:比1024多一点,1025,要你爱我!

    转眼又要到了1024 xff0c 还记得去年的1024活动 xff0c 我写一篇 xff1a 今天是程序员节 xff0c 明天就是求爱日啦 xff01 今年的活动 xff1a 程序员邂逅鼓励师的正确姿势 xff01 鼓励师 这个名词 xff
  • C# 绘制箭头的方法,仿微信截图的箭头

    C 绘制箭头的方法 xff0c 仿微信截图的箭头 效果见下图 xff0c 实际上还是有区别的 xff0c 箭头的起点处微信的是圆端 xff0c 而我实现的是尖端 说说我的实现吧 xff0c 实现方法其实是划线 xff0c 线的两端都要设置端
  • CSDN最近变化有点快

    文章内容原来在右边 xff0c 现在移到了左边 不过博客设置中的皮肤缩略图还没有变 归档样式变了 系统通知类型越来越多
  • 简单功能强大的jQuery在线图片裁剪插件croppic

    帝国CMS后台文章编辑功能的标题图片 xff0c 也就是文章封面设置功能用起来非常的不习惯不好用 xff0c 所以考虑换一个更好用的 xff0c 在网上找了一下 xff0c 最后觉得croppic最不错 xff0c 这里给大家分享一下 cr
  • 网站安全情况自查表怎么填?

    今天收到相关单位一个文档要填写 xff0c 包括 xff1a 表二 xff1a 信息系统运营使用单位填写 xff0c 表三 xff1a 网站安全情况自查表 xff0c 这个怎么填写呢 xff1f 按我个人理解 xff0c 按网站备案的信息填
  • 又是一年1024,去年的1025你是怎么过的?

    除非你在等车 xff0c 回首看看 xff0c 没有人不会觉得时间过得太快了吧 xff01 又是一年1024 xff0c 去年的1025你是怎么过的 xff1f 去年的 程序员的求爱日 比1024多一点 1025 要你爱我 前年的 今天是程
  • 2020年终总结——走在代码公益的路上

    从2012年加入 CSDN 博客 xff0c 已经过去了8个年头 xff0c 有收获也有感慨 xff1b 目前总排名24 xff0c 虽然排名已经很靠前了 xff0c 也是输出了很多内容 xff0c 但不像一些人输出的都是比较系统性的内容
  • nginx 实现图片防盗链功能

    在搜索浏览网页的时候 xff0c 发现一篇文章是从我的个人网站转载的 xff0c 但是没有注明出处 xff0c 文章中的图片也没有本地化处理 xff0c 还是从我的服务器请求 xff0c 这就无形中增加了我的服务器的开销 xff0c 于是有