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
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网与低代码:构建智能化的连接世界

物联网&#xff08;IoT&#xff09;是指通过互联网将各种物理设备、传感器、车辆等连接起来&#xff0c;从而实现数据交互和智能化控制的技术领域。而低代码开发平台则是一种快速构建应用程序的方法&#xff0c;通过简化开发过程&#xff0c;使开发人员能够更迅速地实现创意和创…

猫粮哪个牌子质量好性价比高?十大质量好主食冻干猫粮牌子推荐

近年来&#xff0c;冻干猫粮作为备受追捧的高品质猫粮&#xff0c;吸引了越来越多养猫人的关注。新手养猫就弄不明白了&#xff0c;什么是冻干猫粮呢&#xff1f;冻干猫粮可以作为日常主食一直喂吗&#xff1f; 像我这种养猫老司机早就开始了冻干喂养。我把我这些年总结的经验…

Leetcode 46 全排列

题意理解&#xff1a; 首先明确全排列是什么&#xff1f; 使用集合里所有的元素&#xff0c;使用不同的顺序进行排列&#xff0c;所有的排列集合即为全排列。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 这里的元素不会…

【Jenkins】Centos环境安装Jenkins(通过docker安装)

通过docker环境安装Jenkins 参考官网 https://hub.docker.com/r/jenkins/jenkins/ 1、安装docker环境 # 删除已有安装包 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-…

如何使用自动化工具编写测试用例?

以下为作者观点&#xff0c;仅供参考&#xff1a; 在快速变化的软件开发领域&#xff0c;保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加&#xff0c;仅手动测试无法满足行业需求。 这就是测试自动化发挥作用的地方&#xff0c;它使软件测试人员能…

「C++」内存管理

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;C启航 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;内存分布&#x1f349;关键字new&#x1f349;关键字delete&#x1f349;new和delete的封装实现&#x1f349;总…

小游戏获微信平台扶持,增长爆发点在哪里?开发者还能入局吗?

自2018年正式上线以来&#xff0c;微信小游戏生态的迅速增长&#xff0c;吸引了海量开发者和游戏公司的注意&#xff0c;背靠微信这一平台&#xff0c;小游戏的用户规模也不断膨胀&#xff0c;二者共同作用下&#xff0c;微信小游戏也是爆款频出。 AdSet官网 | 聚合SDK广告变现…

Java 数据结构篇-用数组、堆实现优先级队列

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 优先级队列说明 2.0 用数组实现优先级队列 3.0 无序数组实现优先级队列 3.1 无序数组实现优先级队列 - 入队列 offer(E value) 3.2 无序数组实现优先级队列 - 出…

山西电力市场日前价格预测【2023-12-14】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-14&#xff09;山西电力市场全天平均日前电价为491.16元/MWh。其中&#xff0c;最高日前电价为804.44元/MWh&#xff0c;预计出现在16:15。最低日前电价为336.28元/MWh&#xff0c;预计…

作业11.27

1. 2. def methods(m, n):#创建一个二维数组cp&#xff0c;用于存储到到每个位置的不同走法数量&#xff1b;cp [[0] * n for _ in range(m)]#从第一行和第一列的格子上的走法数量都为1for i in range(m):cp[i][0] 1for j in range(n):cp [0][j] 1#从第二行和第二列开始&…

smartKettle离线部署及问题记录

目录 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 部署&#x1f4d7;源码下载&#x1f4d7;后端部署&#x1f4d5;导入后端项目&#x1f4d5;修改settings.xml(自动下载相关jar包)&#x1f4d5; 编译&#x1f4d5; …

高精度电压源的作用是什么

高精度电压源是一种用于提供稳定和精确电压输出的电子设备。它们在实验室研究、工业生产和医疗器械等各种应用中发挥着重要作用。下面西安安泰来为大家详细介绍高精度电压源的作用和用途等内容。 一、高精度电压源的作用 提供准确的电压值&#xff1a;高精度电压源可以提供非常…

直流电、交流电、电磁波、光之间的联系

直流电、恒定磁场、交流电、交变磁场、电磁波、光之间的联系 频率为0Hz的直流电及恒定磁场 从频率的角度上看&#xff0c;直流电与恒定磁场的方向不变&#xff0c;频率为0Hz. 如可充电锂离子电池的电压3.7V, 干电池的电压1.5V. 磁铁的磁场方向从N极到S极&#xff0c;始终保持…

AnimateAnything:Fine-grained open domain image animation with motion guidance

1.Introduction 本文旨在借助视频扩散模型的motion prior来解决开放领域图像动画问题&#xff0c;提出了一种可控扩散图像动画方法&#xff0c;能够在保留细节的同时对图像中的任意对象进行动画处理。为了增强用户对动画过程的控制能力&#xff0c;引入了motion area guidance和…

vue3 添加编辑页使用 cron 表达式生成

示例效果图 1、添加组件 <template><div class"v3c"><ul class"v3c-tab"><li class"v3c-tab-item" :class"{ v3c-active: tabActive 1 }" click"onHandleTab(1)">秒</li><li class&qu…

小航助学2023年9月电子学会Scratch三级真题(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 单选题2.00分 删除编辑附件图文 答案:C 第1题运行下面程序后&#xff0c;角色的x坐标值是&#xff1f;&#xff08; &#xff09; A、100B、90C、110D、120 答…

【前端学习记录】记一次分片上传逻辑的调试过程

前言 在项目开发的过程中&#xff0c;经常会遇到上传和下载&#xff0c;对于上传来说&#xff0c;如果是小文件的话&#xff0c;接口响应会比较快&#xff0c;但是对于大文件&#xff0c;则需要对其分片以减少请求体的大小和上传时间。 小文件上传 以Vue框架使用<el-uplo…

官宣 鸿雁成为2023汇丰世界羽联世界巡回赛总决赛官方供应商

全屋智能和羽毛球运动能擦出怎样的火花&#xff1f; 鸿雁给你答案&#xff01; 12月13日&#xff0c;2023汇丰世界羽联世界巡回赛总决赛将在杭州举行。 鸿雁签约成为2023汇丰世界羽联世界巡回赛总决赛官方供应商&#xff0c;将携手世界羽联&#xff0c;为广大羽毛球爱好者们…

Yolov5双目测距-双目相机计数及测距教程(附代码)

引言 在计算机视觉领域&#xff0c;Yolov5-Binocular相机距离计数及测距是一个引人注目的研究方向。本教程将为小白用户提供一个简明扼要的学习指南&#xff0c;涵盖了关键步骤&#xff0c;包括标定、公示推倒以及重要的代码片段。 第一步&#xff1a;环境搭建 首先&#x…

【Geoserver】将geoserver迁移到jetty的发行包中

之前讲了在Geosever的二进制发行包中升级jetty的内容&#xff0c;我测试之后发现有些问题&#xff0c;本地运行可能没有问题&#xff0c;但是在linux上运行报错了。 于是我想着换个思路好了&#xff0c;总是想着将Geosever中的jetty包替换掉&#xff0c;干脆反过来&#xff0c;…