nginx组件location匹配的规则和优先级

注意:

location匹配的规则和优先级——重点

nginx常用的变量——要求掌握

rewrite重定向功能——掌握,理解

location 匹配的规则和和优先级

location匹配

常见的nginx正则表达式(匹配的文件内容)

“.” : 任意单个字符

^::匹配输入字符串的起始位置

$:匹配输入字符串的结束位置

*:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+:匹配前面的字符一次或者多次。如“ol+”能匹配"ol"及“oll”、"olll",但不能匹配“o”

?:匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,“?”等效于“{0,1}”

\:  转义符,将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用,如“\n”匹配一个换行符,而“\$”则匹配“$”

[a-zA-Z0-9]:匹配所有大小写字母或者数字任意一个

[c]:匹配单个字符c

{n}:重复n次

{n,m}:重复n到m次

():表达式的开始和结束位置

|:或运算符,逻辑或

URI:是一种字符串标识符,用于标识抽象或物理资源,如文件、图片、视频等。

它由多个组件组成,包括协议、主机名、端口号、路径等,例http://www.kgc.com:8080/index.html 就是一个 URI。

在 Nginx 中,匹配的对象通常是 URI 的一部分

www.ky30.com/images/1.jpg

匹配的/images/.jpg

location匹配URI的分类

匹配类别表示方法优先级
精确查找location = / {...}优先级最高
正则匹配location ~ / {...}其次
一般匹配location / {...}优先级最低


location优先级:

1、首先精确匹配 =

2、其次前缀匹配 ^~

3、其次是按文件中顺序的正则匹配~或者~*

4、然后匹配不带任何修饰的前缀匹配

5、最后是交给/通用匹配

location = > location ^~ > location ~* > location /test/ > location /

匹配的规则:

=:进行普通字符精确匹配,也就是完全匹配

^~:表示普通字符匹配,使用前缀匹配,如果匹配成功,就不再匹配其他的location

~:区分大小写的匹配

~*:不区分大小写的匹配

~$: 结尾位置

!~:区分大小写的匹配取非

!~*:不区分大小写的匹配取非

location 匹配规则 越精准,越匹配,(优先级越高)

在实际生产中使用的匹配规则

第一个必选规则

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网,可以是个静态首页,可以直接转发给后端应用服务器

location = / {
   root  html;
   index index.html index. htm;
}
 

第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项

有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {
    root /webroot/static/;
}

第三种规则:匹配图片视频使用的

location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {}

第四,通用规则

用来转发带.php、.jsp后缀的动态请求到后端应用服务器,非静态文件请求就默认是动态请求

location / {
    proxy_pass http://tomcat_server;

proxy_pass:指定代理,转发动态请求,
}

rewrite:

rewrite的作用:

使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向

nginx的内置变量:
$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。

$remote_port: 客户端的端口号。

$server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。

$document_root: 当前请求的根目录。

$server_name: 服务器名称,用于匹配server块的server_name指令。

default_ type text/plain

表示如果没有其他地方显示,content type的头字段,默认响应为text/plain

纯文本格式:

text/html:默认的响应类型,也就是我们说的页面

text/plain : 纯文本格式,类似于txt文件

text/css : css样式表的类型

text/javascript : java脚本 ,js: 前端文件  也可以理解是java解析的程序文件

rewrite执行顺序如下

  1. 执行 server 块里面的 rewrite 指令。
  2. 执行 location 匹配。
     
  3. 执行选定的 location 中的 rewrite 指令。
     

rewrite语法

rewrite <regex> <replacement> [flag]

  1. regex :表示正则匹配规则
  2. replacement :表示跳转后的内容
  3. flag :表示 rewrite 支持的 flag 标记

 flag标记说明

标记位:

1、permanent : 永久重定向,返回码位301,

永久性变量url 搜索引擎会转移他的权重以及排名到新的URL

2、redirect :临时重定向,显示的返回码是302

用于短期变更(网站维护,或则升级更新)搜索引擎是不是转移权重和排名到新的URL

304:获取本地缓存

3,break : 作用:

是重定向但是不会改变 uri ,而且只会请求一次,跳出当前匹配即可终止

4、last  : 本条规则匹配完成后,继续向下匹配新的location URI规则只要有last就继续匹配,配置时需要注意,防止死循环

"rewrite or internal redirection cycle while processing

它表示在处理请求时发生了重写或内部重定向循环

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

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

相关文章

资深媒体人宋繁银加入《数据猿》任总编辑,全面负责公司整体内容工作

大数据产业创新服务媒体 ——聚焦数据 改变商业 2023年7月北京&#xff0c;《数据猿》宣布正式任命宋繁银为总编辑&#xff0c;全面负责公司整体内容工作。此次重要的人事任命标志着《数据猿》的发展迈上了一个新的台阶&#xff0c;对于《数据猿》团队而言&#xff0c;不仅是一…

Nginx反向代理出现错误 502 bad gateway 案例解析

场景描述 Nginx uwsgi flask Flask框架写的程序&#xff0c;使用uwsgi启动&#xff0c;Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长&#xff0c;会超过1分钟&#xff0c;在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误&#xf…

Python中的*args, **kwargs

在Python中&#xff0c;*args 和 **kwargs 是两种传递变量数量的参数到一个函数的方法。它们分别用于处理位置参数和关键字参数。 *args: *args 允许在函数定义中传入一个非固定数量的位置参数。这些参数在函数内部作为一个元组 (tuple) 访问。可以使用任何名称而不仅仅是args&…

最强Python自动化神器Playwright

相信玩过爬虫的朋友都知道selenium&#xff0c;一个自动化测试的神器工具。写个Python自动化脚本解放双手基本上是常规的操作了&#xff0c;爬虫爬不了的&#xff0c;就用自动化测试凑一凑。 虽然selenium有完备的文档&#xff0c;但也需要一定的学习成本&#xff0c;对于一个纯…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1&#xff09;redis事务&#xff0c;事务的三大命令语法&#xff1a;开启事务 multi语法&#xff1a;执行事务 exec语法&#xff1a;取消事务 discard 1.2&#xff09;redis事务的错误和回滚的情况1.3&#xff09;watch机制语法&…

VS Code安装使用教程

目录 1. VS Code是什么&#xff1f; 2. VS Code的下载和安装 下载&#xff1a; 安装&#xff1a; 2.2 环境的介绍 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 下载&#xff1a; 配置&#xff1a; 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编…

06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

文章目录 1. 主要的窗体类及其用途2. 窗体类重要特性的设置2.1 setAttribute()函数2.2 setWindowFlags()函数2.3 setWindowState()函数2.4 setWindowModality()函数2.5 setWindowOpacity()函数 3. 多窗口应用程序设计3.1 主窗口设计3.2 QFormDoc类的设计3.3 QFormDoc类的使用3.…

linux自定义网络访问规则

1.更改防火墙默认区域为trusted firewall-cmd --set-default-zonetrusted 2.新建一个zone&#xff0c;将想要访问本机80端口的ip&#xff0c;如&#xff1a;192.168.3.99 &#xff0c;添加的这个zone中&#xff0c;同时在这个zone中放行80端口。 firewall-cmd --permanent --ne…

【Unity实战100例】用户头像圆形遮罩使用Shader不用Mask组件

目录 一.创建材质 二.创建Shader文件编写Shader代码 三.Image材质设置 源码:https://download.csdn.net/download/qq_37310110/88196529 前言:我们在使用Unity的自带组件Mask的时候会出现毛边现象很难处理掉,这里我们使用着色器shader来进行处理就不会出现毛边现象。

通过redis进行缓存分页,通过SCAN扫描进行缓存更新

问题&#xff1a;当我们要添加缓存时&#xff0c;如果我们用了PageHelper时&#xff0c;PageHelper只会对查询语句有效&#xff08;使用到sql的查询&#xff09;&#xff0c;那么如果我们把查询到的数据都添加到缓存时&#xff0c;就会无法进行分页&#xff1b; 此时我们选择将…

node配置Web 服务器

1、什么是 Web 服务器 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;Web服务器的基本功能就是提供Web信息浏览服务。 它只需支持HTTP协议、HTML文档格式及URL&#xff0c;与客户端的网络浏览器配合。 大多数 web 服务器都支持服…

Javascript 正则

基本语法 定义 JavaScript种正则表达式有两种定义方式 构造函数 var regnew RegExp(<%[^%>]%>,g);字面量 var reg/<%[^%>]%>/g;g&#xff1a; global&#xff0c;全文搜索&#xff0c;默认搜索到第一个结果接停止i&#xff1a;ingore case&#xff0c;忽略…

接口自动化测试框架及接口测试自动化主要知识点

接口自动化测试框架&#xff1a; 接口测试框架&#xff1a;使用最流行的Requests进行接口测试接口请求构造&#xff1a;常见的GET/POST/PUT/HEAD等HTTP请求构造 接口测试断言&#xff1a;状态码、返回内容等断言JSON/XML请求&#xff1a;发送json\xml请求JSON/XML响应断言&…

绝了!工业配电柜看这篇就够了!

随着工业自动化的不断发展&#xff0c;电力作为生产的重要支撑&#xff0c;其稳定性、安全性和高效性变得尤为重要。 配电柜作为电力系统的核心组成部分&#xff0c;其监控不仅关乎生产的连续性&#xff0c;也涉及员工和设备的安全。通过实时监测、数据采集和分析&#xff0c;工…

Linux 上安装部署Nacos

标题&#xff1a;在Linux上安装和部署Nacos Nacos是一个开源的分布式服务发现和配置管理平台&#xff0c;它可以帮助开发人员实现微服务架构中的服务注册、发现和动态配置管理。 步骤1&#xff1a;准备工作 在开始安装Nacos之前&#xff0c;确保您已经具备以下条件&#xff1…

Mongoose http server 例子

今天抽了点时间看了一下 mongoose的源码&#xff0c; github 地址&#xff0c;发现跟以前公司内部使用的不太一样&#xff0c;这里正好利用其 http server 例子来看一下。以前的 http message 结构体是这样的&#xff1a; /* HTTP message */ struct http_message {struct mg_…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时&#xff0c;思考了一下它的较浅层的原理&#xff0c;恩&#xff0c;这个阶段都 是一些初高的数学计算&#xff0c;从新看这里的时候顺便捡了捡初高中的数学&#xff0c;比如三角函数之类…

CSS:盒子模型 与 多种横向布局方法

目录 盒子模型块级盒子内联级盒子内联块级盒子弹性盒子display 改变模型区域划分text 内容区padding 填充区border 边框区margin 外边距直接设置盒子大小 布局横向布局方法一 float 浮起来方法二 内联块级元素实现方法三 弹性盒子模型 盒子模型 块级盒子 独占一行&#xff0c…

Unity学习笔记--使用 C# 开发一个 LRU

目录 什么是 LRULRU 核心思想代码实现一&#xff1a;双向链表 哈希表分析代码实现二&#xff1a;OrderedDictionary分析项目案例预告结尾 什么是 LRU 在计算机系统中&#xff0c;LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;是一种缓存置换算法。…

React中使用mobx管理状态数据使用样例

MobX 是一个身经百战的库&#xff0c;它通过运用透明的函数式响应编程&#xff08;Transparent Functional Reactive Programming&#xff0c;TFRP&#xff09;使状态管理变得简单和可扩展。官网地址&#xff1a;关于 MobX | MobX中文文档 | MobX中文网 安装依赖 mobx-react-…