Nginx【通俗易懂】《中篇》
目录

1.Url重写rewrite
2.防盗链
3.静态资源压缩
4.跨域问题
1.Url重写rewrite 🤩🤩🤩
1.1.rewrite书写格式
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
- 关键字:其中关键字error_log不能改变
- 正则:perl兼容正则表达式语句进行规则匹配
- 替代内容:将正则匹配的内容替换成replacement
- flag标记:rewrite支持的flag标记
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
1.2.常用正则表达式说明
| \ | 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$” |
| ^ | 匹配输入字符串的起始位置 |
| $ | 匹配输入字符串的结束位置 |
| * | 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” |
| + | 匹配前面的字符一次或多次。如“ol+”能匹 配“ol”及“oll”、“oll”,但不能匹配“o” |
| ? | 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}" |
| . | 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。 |
1.3.nginx.conf配置
server {listen 80;server_name hqdmdxz.com;location / {rewrite ^/a.png /image/01.png redirect;proxy_pass http://hqdmdxz;proxy_redirect default;proxy_next_upstream error timeout http_500 http_503 http_404;}}
通过测试可以看出,当请求:hqdmdxz/a.png时,会跳转到:hqdmdxz/image/01.png
rewrite重定向
1.4.if指令
该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置。
| 语法 | if (condition){...} |
| 默认值 | ------------------ |
| 位置 | server、 location |
condition为判定条件,可以支持以下写法:
- 1.变量名。如果变量名对应的值为空字符串或"0", if都判断为false,其他条件为true
if($param){}
- 2.使用"="和"!=比较变量和字符串是否相等,满足条件为true,不满足为false
if($request_method != POST){}
- 3. 使用正则表达式对变量进行匹配,匹配成功返回true,否则返回false。变量与正则表达式之间使用"-","-""-","-*"来连接。
- "-"代表匹配正则表达式过程中区分大小写
- "~*"代表匹配正则表达式过程中不区分大小写
- "!~"和"!-*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true
if ($http_user_agent ~* safari){return 200 Chrome;}
1.5.return指令
该指令用于完成对请求的处理,直接向客户端返回。在return后的所有Nginx配置都是无效的。
1.6rewrite_log指令
该指令配置是否开启URL重写日志的输出功能。
语法:rewrite_log on|off;
注:开启后, URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件汇总。
location /rewrite {rewrite_log on;error_log logs/error.log notice;rewrite ^/rewrite/url\w*$ http://192.168.20.129/a.png;rewrite ^/rewrite/(test)\w*$ /$1 redirect;rewrite ^/rewrite/(demo)\w*$ /$1 redirect;}
2.防盗链🤩🤩🤩
防盗链简单来说就是存在我们服务中的一些资源,只有我们规定的合法的一类人才能去访问,其他人就不能去访问的资源(如css,js,img等资源)。
具体体现:
- 准备两台服务器,A服务器跳转到B服务器上,访问B服务器上的图片。
server {listen 80;server_name xz.com;location / {proxy_pass http://192.168.20.129;proxy_redirect default;proxy_next_upstream error timeout http_500 http_503 http_404;}
}
通过xz.com/image/01.png,可以访问到图片

给B服务器添加防盗链配置:
location /image/ {root /data/;autoindex on;valid_referers none blocked 192.168.20.129;if ($invalid_referer) {return 401;}}location /error/ {root /data/;autoindex on;}error_page 401 /401.html;location = /401.html {root html;}
- none: 如果Header中的Referer为空,允许访问 (直接访问图片是没有referer的!!)
- blocked:在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。
location /image/ {}为设置防盗链的文件目录,使用竖线|分隔。valid_referers 192.168.20.129;这个是如果返回的头部referer为192.168.20.129那么就不会执行valid_referer下面内容,反之就if ($invalid_referer)这个含义就是结合上面的valid_referers,如果请求头部为192.168.20.129,那么就$invalid_referer就会被赋值为0,就不会执行返回错误代码401,如果不是www.baidu.com,那么就会赋值为1,就会执行下面内return 403;代表返回的状态码为403。
测试:
ocation /image/ {root /data/;autoindex on;valid_referers blocked 192.168.20.129;if ($invalid_referer) {return 401;}
}
发现还能访问,为什莫跳转到401.html呢??????
解答:因为我们是直接访问的 ,这种是没有头部的(只有二次请求才会有referer头部),而且我们还加none,(如果Header中的Referer为空,允许访问)。
- 配置中去掉none再次访问:防盗链起作用

至此防盗链生效!!!!

3.静态资源压缩 🤩🤩🤩
在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中, Nginx可以通过
- ngx_http_gzip_module模块
- ngx_http_gzip_static_module模块
- ngx_http_gunzip_module模块
对这些指令进行解析和处理。
注:下面的指令都来自ngx_http_gzip_module模块,该模块会在nginx安装的时候内置到nginx的安装环境中,也就是说我们可以直接使用这些指令。
3.1.gzip指令
1.gizp:用于开启或者关闭gzip功能
2.语法:gzip on|off;
3.2.gzip_types指令
http{gzip on;gzip_types 所选值在mime.types查找
}
3.3.gzip_comp_leve指令
gzip_comp_level指令:该指令用于设置Gzip压缩程度,级别从1-9,1表示要是程度最低,要是效率最高,9刚好相反,压缩程度最高,但是效率最低最费时间。
http {gzip_com_level 级别;
}
3.4gzip_vary指令
gzip_vary指令:该指令用于设置使用Gzip进行压缩发送是否携带"Vary:AcceptEncoding"头域的响应头部。主要是告诉接收方,所发送的数据经过了Gzip压缩处理.
语法:gzip_vary on|off
http {gzip_vary on;
}

3.5.gzip_buffers指令
- 该指令用干处理请求压缩的缓冲区数量和大小。
- 语法:gzip_buffers number size;
其中number:指定Nginx服务器向系统申请缓存空间个数,size指的是每个缓存空间的大小。主要实现的是申请number个每个大小为size的内存空间。这个值的设定一般会和服务器的操作系统有关,所以建议此项不设置,使用默认值即可。
3.6.gzip_disable指令
- gzip_disable指令:针对不同种类客户端发起的请求,可以选择性地开启和关闭Gzip功能。
- 语法:gzip_disable regex...;
regex:根据客户端的浏览器标志(user-agent)来设置,支持使用正则表达式。指定的浏览器标志不使用Gzip.该指令一般是用来排除一些明显不支持Gzip的浏览器。
http{gzip_disable "Mozilla/5.0.*";
}

3.7.gzip_min_length指令
- gzip_min_length指令:针对传输数据的大小,可以选择性地开启和关闭Gzip功能。
- 语法:语法gzip_min_length length;
Gzip压缩功能对大数据的压缩效果明显,但是如果要压缩的数据比较小的话,可能出现越压缩数据量越大的情况,因此我们需要根据响应内容的大小来决定是否使用Gzip功能,响应页面的大小可以通过头信息中的`content-Length`来获取。但是如何使用了Chunk编码动态压缩,该指令将被忽略。建议设置为1K或以上。

http {gzip_min_length 86028;
}
3.8.gzip_proxied指令
- gzip_proxied指令:该指令设置是否对服务端返回的结果进行Gzip压缩。
- 语法:gzip proxied off|expired|no-cache| <br/> no-store | private | no_last_modified | no_etag |auth |any;
off-关闭Nginx服务器对后台服务器返回结果的Gzip压缩
expired-启用压缩,如果header头中包含 "Expires" 头信息
no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
no-store-启用压缩,如果header头中包含"Cache-Control:no-store" 头信息
private -启用压缩,如果header头中包含 "Cache-Control:private" 头信息
no_last_modified-启用压缩,如果header头中不包含"Last-Modified" 头信息
no_etag- 启用压缩,如果header头中不包含 "ETag" 头信息
auth-启用压缩,如果header头中包含"Authorization"头信息
any-无条件启用压缩
4.跨域问题🤩🤩🤩
4.1同源策略
- 同源:协议、域名(IP)、端口相同即为同源
4.2什么是跨域
有两台服务器分别为A,B,如果从服务器A的页面发送异步请求到服务器B获取数据,如果服务器A和服务器B不满足同源策略,则就会出现跨域问题。
4.3解决跨域
此处用来解决跨域问题,需要添加两个头信息:
- Access-Control-Allow-Origin:直译过来是允许跨域访问的源地址信息,可以配置多个(多个用逗号分隔),也可以使用*代表所有源
- Access-Control-Allow-Methods:直译过来是允许跨域访问的请求方式,值可以为GETPOST PUT DELETE...可以全部设置,也可以根据需要设置,多个用逗号分隔
location /请求地址 {add_header Access-Control-Allow_orign 允许跨域的id;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE
}

相关文章:
Nginx【通俗易懂】《中篇》
目录 1.Url重写rewrite 2.防盗链 3.静态资源压缩 4.跨域问题 1.Url重写rewrite 🤩🤩🤩 1.1.rewrite书写格式 rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到rep…...
组件的二次封装
在React中,使用扩展运算符(...)来传递props的作用是将一个对象的所有可枚举属性(包括自身的和继承的)复制到新创建的对象中。当我们在二次封装组件时使用它,可以方便地将所有传递给我们的props传递给基础组…...
curl+postman 在java开发中的使用(提高效率)
概念 curl 是一个常用的命令行工具,用于发送各种类型的 HTTP 请求,包括 GET、POST、PUT、DELETE 等。它也可以用来下载文件、上传文件、设置 cookie、发送 multipart/form-data 等等。 使用 调用post接口 实际中的接口: curl --location…...
【电子取证:FTK IMAGER 篇】DD、E01系统镜像动态仿真
文章目录 【电子取证:FTK Imager 篇】DD、E01系统镜像动态仿真一、DD、E01系统镜像动态仿真 (一)使用到的软件 1、FTK Imager (v4.5.0.3)2、VMware Workstation 15 Pro (v15.5.2)(二)FTK Imager 挂载镜像 1、选择 …...
netcat瑞士军刀
netcat瑞士军刀 1、nc简介3、从示例中学习2、命令格式及常用参数 1、nc简介 nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用: (1)端口侦听,nc 可以作为 server 以 TC…...
【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)
【有ISSN、ISBN号!!往届均已完成EI检索】 第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 2023 3rd International Conference on High Performance Computing and Communication Engineering (HPCCE 2023) 2023年12月22-24日 | 中国哈尔滨 第三…...
编程应用实际场景:台球厅怎么样用电脑给客人计时,台球计时收费系统操作教程
一、前言 准确控制顾客在店内游玩的时间,从而控制店内的各项成本,并提升店内的客流量。在顾客享受计时项目的时候,可以同时添加其他食物消费,并将单据合并统一结账。软件中的会员功能可以为客户办理会员可以使用灯控器控灯&#…...
云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)
大屏组件可以让UI设计师的工作更加便捷,使其更高效快速的完成设计任务。现分享可视化云分析系统、可视化云计算分析平台、云实时数据大屏的大屏Photoshop源文件,开箱即用! 若需 更多行业 相关的大屏,请移步小7的另一篇文章&#…...
高频js-----js执行机制 Event Loop
修改代码,让代码每隔1秒输出1-5 for (var i 0; i < 5;i) {setTimeout(() > {console.log(i)}, 1000)} 首先我们需要了解js的执行机制 (Event Loop) js是单线层,如果现在执行上面代码的话 会输出 5个5 这里不明白的同学可以去看一下我以前发布的关于EventLoop的文章 …...
恢复出厂设置后在 Android 上恢复照片的 6 种常用方法
恢复出厂设置可帮助您删除电子设备的所有信息并将其恢复到原始系统状态。但是,如果您不小心按下了恢复出厂设置按钮并从 Android 设备中删除了所有难忘的照片,该怎么办?好吧,您无需担心,因为可以通过以下一些方法来恢复…...
人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105
之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去看,也…...
网线市场现状与发展趋势预测
随着物联网、5G、云计算等技术的迅速发展,全球对于高速、稳定的网络需求急剧增长,这进一步推动了网线市场的发展。各种网络应用场景,从家庭到企业、数据中心到智能城市,都需要大量的高质量网线来支持数据传输和通信需求。本文将对…...
力扣二叉树--第四十一天
前言 写完这三道题,二叉树部分就先告一段落了。其实还有很多模糊的地方。 内容 一、修剪二叉搜索树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[l…...
计算机视觉(P2)-计算机视觉任务和应用
一、说明 在本文中,我们将探讨主要的计算机视觉任务以及每个任务最流行的应用程序。 二、图像内容分类 2.1. 图像分类 图像分类是计算机视觉领域的主要任务之一[1]。在该任务中,经过训练的模型根据预定义的类集为图像分配特定的类。下图是著名的CIFAR…...
redis-学习笔记(Jedis zset 简单命令)
zadd & zrange zadd , 插入的第一个参数是 zset , 第二个参数是 score, 第三个参数是 member 成员 内部依据 score 排序 zrange 返回 key 对应的 对应区间内的值 zrangeWithScore 返回 key 对应的 对应区间内的值和分数 示例代码 zcard 返回 key 对应的 zset 的长度 示例代…...
uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)
效果预览 弹出的内容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子组件调父组件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…...
智能优化算法应用:基于平衡优化器算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于平衡优化器算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于平衡优化器算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.平衡优化器算法4.实验参数设定5.算法…...
Netty详细文档
Netty教程 文章目录 Netty教程 Netty简介Netty 的介绍Netty 的应用场景互联网行业游戏行业大数据领域其它开源项目使用到 Netty Netty 的学习资料参考 Java BIO编程I/O 模型BIO、NIO、AIO 使用场景分析Java BIO 基本介绍Java BIO 工作机制Java BIO 应用实例问题分析 Java NIO编…...
C语言结构体和位段
自定义类型:结构体及联合和枚举 一.结构体类型的声明1.1 结构体的概念1.2结构的声明1.3特殊的声明1.4结构体的自引用1.5可以使用typedef重命名 二.结构体变量的创建和初始化2.1结构体变量的初始化使用{}2.2初始化:定义变量的同时赋初值。2.3结构体嵌套及…...
【剑指offer|图解|数组】寻找文件副本 + 螺旋遍历二维数组
🌈个人主页:聆风吟 🔥系列专栏:数据结构、剑指offer每日一练 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️寻找文件副本(题目难度:简单)1.1 题目1.2 示例1.3 限制1.4 解题思路一c代…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
