Nginx:防盗链原理和配置

article/2025/10/12 18:52:12

目录

一、防盗链概念

 二、Nginx防盗链的具体实现

        配置:

三、验证和验证时的问题

        真正的验证:

        没有none的验证

         加上none参数的验证

        让报错返回的是一张图片

注意事项:


一、防盗链概念

        防盗链简单来说就是存在我们服务中的一些资源,只有我们规定的合法的一类人才能去访问,其他人就不能去访问的资源(如css,js,img等资源)。

        具体点就是用户发送请求给nginx服务器,nginx服务器根据请求去寻找资源,请求的比如说是有个index.html文件,这个文件中会包含很多js,css,img等资源,这些文件在这个骨架中会被二次请求,在第二次请求时,会在请求头部上加上有个referer,这个referer只会在第二次请求时才会被加上。(referer表示第二次资源的来源地址)

如下图中b站的referer头部展示:

 二、Nginx防盗链的具体实现

        valid_referers:nginx会通过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就将$invalid_referer变量置0,如果没有匹配到,则将$invalid_referer变量置为1,匹配的过程不区分大小写

语法:valiad_referers none|blocked|server_names|string

默认值:-

位置(可以书写的地方):server,location

none:如果header中的referer为空,允许访问

blocked:在header中的referer不为空,但是该值被防火墙或代理服务器进行伪装过,如不带“http://”、“https://”等协议头的资源允许访问。

server_names:指定具体的域名或者IP

        配置:

进入配置文件进行配置

这里主要是对一些图片资源进行防盗(下面有配置的详细说明)

location ~ .*\.(png|jpg|gif)$location:输入的url后面跟的路径,如果路径与location后的内容相匹配就执行location下的内容~:开始正则匹配.*:.表示出换行符/n之外的所有字符,*就是匹配0次或多次。\.:\转译符号将具有特殊含义的字符,转为纯字符型,.这里有包含任意字符的意思,所以需要转译(png|jpg|gif)$:表示结尾要是以png、jpg、gif为结尾vaild_referers none blocked www.baidu.com这个是如果返回的头部referer为www.baidu.com那么就不会执行valid_referer下面内容,反之就会if ($invalid_referer)这个含义就是结合上面的valid_referer,如果请求头部为www.baidu.com,那么就$invalid_referer就会被赋值为0,就不会执行返回错误代码401,如果不是www.baidu.com,那么就会赋值为1,就会执行下面内容return 401:返回错误代码401

其实配置到这一步已经完成了对于防盗链的配置

 我提前准备好了一张图片来用于验证

三、验证和验证时的问题

配置好文件后记的restart或者-s reload一下服务

然后开始验证

        欸嘿,我们不是明明对默认的html中的文件进行了防盗的配置了吗,那为什么我们直接输入ip和后面的以.jpg为结尾的路径还是会输出图片呢?为什么不是返回401报错呢?

        解答:这里主要有两个原因:这种形式的访问是直接请求服务器中默认html中的1.jpg文件,是没有头部的(只有二次以上请求才会有referer头部),并且我们在配置文件中添加了[none]这个参数,它的含义就是当我们在没有头部referer时,依然能访问到文件,所以我们配置的防盗链在这个时候是不起作用的。

真正的验证:

        没有none的验证

        如果我们把none参数去掉看一下效果就行了

 再访问一下,这就有防盗了

 这样也就能验证成功了

         加上none参数的验证

我们需要自己写一个或者复制html的文件

 这里我直接复制了index.html中的文件,并在其中添加了图片路径

 看一下页面效果

就是这样。

配置还是一开始的加none的那个

 我们去访问这个1.html文件时看一下效果(下图的开发者界面按"F12"就能出来)

 查看一下报错1.jpg的头部

 因为无法匹配到这个头部IP,所以就会报401的错误

        让报错返回的是一张图片

              

 让我们报错时,不再是数字,而是这张图片

配置文件在下面

 我们使用rewrite重定向,让它向我们返回这张图片

rewrite ^/ /2.jpgrewrite:就是重定向url^/:重定向到哪,^/表示所有/2.jpg:将什么重定向到哪

rewrite简单来说就是这个效果,我后面也会单独写一篇去详细说明rewrite的使用(rewrite很重要)

在访问一下,看一下之后的效果

会发现我们新添的这张图,代替了先前图的位置

到此这就是防盗链的东西了。

注意事项:

        每次修改配置文件后都要重启服务,如果没有将文件配置到/var/lib/systemd/system就使用-s reload去重新加载文件

        在配置过程中,我们刷新浏览器会得不到想要的结果,不要慌张,可能是浏览器的缓存没有被清除F12进入开发者模式,打开下面两项,再去刷新就可以了

 或者

         

        


http://chatgpt.dhexx.cn/article/r6GTnxNT.shtml

相关文章

Java:eclipse下开发webservice教程

1 环境准备 下载wtp-all-in-one-sdk-R-1.5.4-win32,这个是eclipse的web开发插件 下载jakarta-tomcat-5.0.30 下载axis-src-1_4.zip 2 环境配置 配置tomcat关联到你的eclipse中 将axis-1_4\webapps\axis\WEB-INF\lib中的文件复制到$TOMCATHOME$\…

webservice 教程学习系列(九)——使用cxf框架开发webservice

首先下载两个包:apache-cxf-3.2.7.zip和apache-cxf-3.2.7-src.zip 解压两个包,进入apache-cxf-3.2.7的bin目录 可以看到wsdl2java.bat,这个相当于jdk自带的wsimport.exe的功能,可以将wsdl文件转换成java文件。 这里我的目录是&a…

WebService开发教程

一、webservice 开发 1.webservice介绍 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,…

MyEclipse开发WebService教程

创建一个 webService 工程。 2. 创建一个普通 Java 类 view plain copy to clipboard package com.hmw.jaxws; /** * 提供 WebService 服务的测试类<br> * <b>注意&#xff1a;</b>该类必须有一个无参构造方法&#xff0c;否则无法使用 MyEclipse 的向导为此…

WebService培训教程详解

开发webservice 1. 概述 开发手段&#xff1a;使用JDK开发(1.6及以上版本)使用CXF框架开发(工作中)组成&#xff1a;服务器端客户端 2. 使用JDK开发WebService 1).开发服务器端 Web Service编码&#xff1a;WebService( SEI和SEI的实现类)WebMethod(SEI中的所有方法)发布W…

SoapUI测试webservice接口

方法1、导入wsdl文件 输入参数&#xff0c;点击运行&#xff0c;看到响应结果 方法2、输入wsdl地址 项目名随便起一个&#xff0c;Initial WSDL直接输入wsdl地址&#xff0c;确定即可。

孔浩老师 java 微信_孔浩老师JAVA WebService教程

课程目录&#xff1a;01_webservice快速实例 02_wsimport的使用 03_wsdl和soap讲解(介入了tcpmon工具) 04_SOA的分析(纯属扯淡) 05_dtd讲解 06_schema的命名空间 07_schema的元素和属性的定义 08_schema的语法和建议的编写方式 09_使用jaxb完成对象和xml的转换 10_Stax的基本操…

.Net WebService简单学习

一、什么是WebService Web Service是一个使用开放的XML&#xff08;标准通用标记语言下的一个子集&#xff09;标准来描述、发布、发现、协调和配置这些应用程序&#xff0c;用于开发分布式的交互操作的应用程序。 Web Service技术&#xff0c; 能使得运行在不同机器上的不同应…

java webservice 入门教程_WebService入门实例教程

什么是WebService 通过使用WebService&#xff0c;您的应用程序可以向全世界发布信息&#xff0c;或提供某项功能&#xff0c;它是基于Web的服务&#xff0c;通过Web进行发布、查找和使用。 WebService脚本平台需支持XMLHTTP。 HTTP协议是最常用的因特网协议。 XML提供了一种可…

idea使用xfire方式发布webservice教程

近日在熟悉webservice发布的过程&#xff0c;此处主要讲解xfire方式。 1.使用idea新建一个web项目 步骤1&#xff1a; 按照图中的指定序号建立对应的web项目即可。 步骤2&#xff1a; 填写组织ID和具体项目id&#xff0c;点击进行“下一步”即可。 步骤3&#xff1a; 设置相…

java发布webService服务教程

发布webService服务并使用soap UI测试 发布简单的webService服务同时发布多个webService接口使用SoapUI测试webService接口下载SoapUI并安装打开WSDL文件测试文件上传 示例源码 发布简单的webService服务 新建一个Maven项目pom引入 webService需要的依赖 <dependency>&…

WebService 教程(包含项目实践)

情景引入&#xff1a; 时间&#xff1a;早晨 8 : 00 am 小白&#xff1a;起床起床&#xff0c;&#xff0c;&#xff0c;公司又来需求了&#xff0c;你还在睡觉&#xff0c;快点起来~&#xff01; 我&#xff1a;大惊小怪&#xff0c;又怎么了呢&#xff1f;小白&#xff0c…

最详细的idea创建webservice教程

最详细的idea创建webservice教程 创建服务端 File->New Project 点击next&#xff0c;会自动生成demo将要发布的类加上WebService&#xff0c;方法加上WebMethod&#xff0c;设置服务发布address WebService() public class HelloWorld {WebMethodpublic String sayHello…

WebService简单入门

1. JAX-WS发布WebService 创建web工程 创建simple包&#xff0c;和server、client两个子包。正常情况下server和client应该是两个项目&#xff0c;这里我们只是演示效果&#xff0c;所以简化写到一个项目中&#xff1a; 1.1 创建服务类Server package simple.server;import ja…

WebService教程实例

一、准备工作 1、Myeclipse 2014 2、jdk8.0 二、创建服务端 1、创建【Web Service Project】&#xff0c;命名为【TheService】。 2、创建【Class】类&#xff0c;命名为【ServiceHello】&#xff0c;位于【com.hyan.service】包下。 3、编写供客户端调用的方法&#xff0c;即编…

Java小白翻身 - webservice教程2

来一个HelloWorld&#xff0c;SpringBoot发布WebService可简单啦。 1、搭建项目2、配置pom.xml3、建services服务包4、登陆接口类5、登陆接口实现类6、创建CXF配置类7、Parameter 0 of method errorPageCustomizer in ErrorMvcAutoConfiguration 异常解决8、访问webservice9、…

idea2021创建webservice教程

一、创建服务端 1、创建一个新的java工程 2、工程项目右键添加框架依赖 3、选择webservices 4、点击确定完成创建。创建后项目会添加相关依赖。以及测试服务类。 5、代码介绍 // 添加WebService注解 WebService() public class HelloWorld {// 方法添加WebMethod注解W…

WebService教程

最近在学习WebService&#xff0c;今天尝试用Eclipse的插件生成JAX-WS WebService&#xff0c;结果遇到了不少的问题啊&#xff0c;调试了大半天终于把程序跑通了。现在把步骤和问题记录一下&#xff0c;也为了以后遇到相同的问题时能够及时解决。首先利用Eclipse生成WebServic…

WebService入门教程(服务端发布WebService)

本篇内容过多&#xff0c;时间紧迫的朋友可以通过目录快速筛选自己想要看的内容&#xff0c;本人接触webservice也没多久&#xff0c;也处于学习阶段&#xff0c;如果有错误请指正&#xff0c;如果已经是大神请略过这篇文章&#xff0c;这篇文章不涉及webservice的底层原理&…

WebService最详细教程

WebService相关概念 基础概念 WebService是一种跨编程语言和跨操作系统平台的远程调用技术,就是说服务端程序采用java编写&#xff0c;客户端程序则可以采用其他编程语言编写&#xff0c;反之亦然&#xff01;跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统…