Nginx快速入门:nginx各类转发、代理配置详解|location、proxy_pass参数详解(五)

news2025/2/1 4:00:38

0. 引言

咱们上节讲解了nginx的负载均衡配置,但是还有很多其他的转发情况,包括不同路径转发至不同的业务服务,通配符识别路径转发等。

今天一起来学习nginx的转发配置

1. location模块的匹配模式

首先我们要了解nginx进行转发代理的核心在于两处,一是入口,二是出口;入口就是url路径匹配识别对应的路径,出口就是转发映射对应的后台服务地址
在这里插入图片描述

我们的入口路径匹配识别都是在location模块实现的,所以我们要首先认识location支持的匹配模式。

所谓匹配模式,就是根据什么样的路径进行匹配,比如识别到路径以“/user”开头的,则转发至user-server服务,那么“/user”就是我们的匹配路径

location支持2种匹配模式:精确匹配(普通匹配)和模糊匹配(正则匹配),总共以下几种呈现形式:

  • 1、全路径精确匹配 =

进行uri的全路径精确匹配,要匹配的一模一样的uri
比如 location = /index ,那么只有路径为/index的才会匹配到

  • 2、前缀模糊匹配 ^~

进行uri的前缀精确匹配
比如 location ^~ /user/ ,那么只要是路径以/user/开头的都会匹配到

  • 3、无匹配符号的精确匹配

没有符号,按照路径开头精确匹配,但是匹配到后不会立即返回,还会继续匹配其他普通匹配,如果匹配到,则会舍弃之前匹配的路径
比如 location /user/ , 当访问/user/开头时会匹配到
比如 location /user/admin,当访问/user/admin时会匹配到

  • 4、模糊匹配 ~

进行uri的模糊匹配,区分大小写,匹配到后不再进行其他匹配
比如 location ~ /user/ ,当路径包含/user/时会匹配,比如/admin/user/或者/user/admin/
当然也可以用正则表达式来表示匹配路径:
比如 location ~ ^/user(.*)admin$,能够匹配以/user开头,admin结尾的路径,.*表示的是任意字符

这里我们简单测试一下,配置后我们访问192.168.244.41/user/xxx/admin,发现是可以正常转发至后台的tomcat服务的,只是tomcat服务中没有/user地址的接口,所以返回404

在这里插入图片描述
我们继续访问192.168.244.41/user/xxx,发现报的就是nginx的404了,这说明请求并没有转发到后台tomcat中,说明没有命中匹配。
在这里插入图片描述

  • 5、模糊匹配 ~*

进行uri的模糊匹配,不区分大小写,匹配到后不再进行其他匹配,优先级与~相同,按照先后顺序优先
比如 location ~ /USER/,当路径包含/USER/时会匹配,如果是/user/则不会,因为区分大小写了

优先级:
由高到低:= > ^~ > 其他,其他匹配根据先后顺序,配置在前的越优先

2. proxy_pass配置详解

我们上述讲解了匹配模式的书写,匹配到了还要进行合理的转发,而转发模式的控制就是通过proxy_pass, 下面我们来看看proxy_pass的语法结构

2.1 proxy_pass 的四种配置写法

首先我们来回顾下proxy_pass的语法:

 proxy_pass url;

转发地址url分为带/和不带/,带杠的为绝对根路径,会直接在路径后拼接上不带匹配路径的转发地址;如果没有杠表示相对路径,则会将匹配路径也带上进行转发,我们举例说明:

location /user/ {
    proxy_pass url;
}

访问路径固定为:http://192.168.244.21/user/index.html

  • 1、当proxy_pass http://192.168.244.21:8080/

会跳转至http://192.168.244.21:8080/index.html,带/表示绝对路径,匹配路径/user/会被消除

  • 2、当proxy_pass http://192.168.244.21:8080

会跳转至http://192.168.244.21:8080/user/index.html,相对路径,匹配路径/user/不会被消除

  • 3、当proxy_pass http://192.168.244.21:8080/admin/

会跳转至http://192.168.244.21:8080/admin/index.html,匹配路径/user/被消除,并且保留转发路径里的/admin/

  • 4、当proxy_pass http://192.168.244.21:8080/admin

会跳转至http://192.168.244.21:8080/adminindex.html,因为proxy_pass中也包含了/了,表示绝对路径,所以/user/会被消除

总言之记住一点,带/表示绝对路径,请求路径中的匹配路径(location)转发时会被消除

2.2 server和location模块中proxy_pass的区别

在server模块中的proxy_pass只需要配置ip(或域名)和端口,相当于端口转发;而在location中的proxy_pass,也就是我们更加常用的,可以配置域名、ip、端口、uri,此外还需要提供协议:http或https,相当于地址转发。

配置语法如下:

server {
    listen 80;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass xxx.com:8080;
    # proxy_pass 192.168.244.21:8080;
	
	location /user/ {
        proxy_pass http://192.168.244.21:8081;
    }
}

3. location匹配案例练习

  • 1、匹配匹配以.jsp结尾的路径,将其转发至端口为8080的tomcat服务

解析:要匹配以.jsp结尾,只需要默认写上.jsp即可,但是需要注意.是单一字符通配符,所以要添加\做转义,才能表示成本身点的含义

server {
    listen 81;

    location ~ (.*)\.jsp {
       proxy_pass http://localhost:8080;
       proxy_set_header HOST $host;
       proxy_http_version 1.1;


    }
}

测试:

访问ip:81/index.jsp,可以看到成功转发到8080端口的tomcat了(这里提前修改了首页,将端口显示在tomcat首页了)
在这里插入图片描述
去除点号访问,发现访问不通了,测试通过
在这里插入图片描述

  • 2、三台不同的tomcat,端口分别为8080,8081,8083,分别承担不同的业务,将路径以/user开头的请求转发至tomcat 8080, 以/order开头的转发至tomcat 8081, 路径包含/product跳转到tomcat 8083的首页

解析:
该需求实际上一共有两部分,/user,/order的配置都类似,我们使用^~即可,只有8083的需要用到的是跳转,也就是重定向到tomcat 8083首页,这里需要用到return,大家暂时知道即可,下一章我们详细讲解重定向的配置。

server {
    listen 81;

    location ^~ /user {
       proxy_pass http://localhost:8080/;
       proxy_set_header HOST $host;
       proxy_http_version 1.1;

    }

     location ^~ /order {
       proxy_pass http://localhost:8081/;
       proxy_set_header HOST $host;
       proxy_http_version 1.1;

    }

    location ~* /product {
       return http://192.168.244.41:8083/index.jsp;

    }

}

测试:
1、访问/order/index.jsp, /user/index.jsp都成功转发对应服务
在这里插入图片描述

在这里插入图片描述
2、访问/product/xxx,也成功跳转到tomcat 8083首页了,测试通过。
在这里插入图片描述

4. 总结

上述案例我们讲解到了需要重定向跳转的问题,上述案例中可以看到我们重定向后地址栏的地址也发生了变化,这实际上也暴露了一些后台服务的地址信息,如果我们想地址不变化,内容进行转发即可,要怎么实现呢?

这就需要详细学习nginx 重定向的内容,下一章我们将针对这块内容继续攻克。

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

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

相关文章

代理型人工智能系统 萨曼莎 贾维斯的定义,谁开发 谁部署 谁用 出了问题谁负责 是怎样炼成的?

定义:Agenticness, Agentic AI Systems, and “Agents” agnet(名词) n.代理人 agentic(形容词) adj.代理的 agenticness(ness变名词) n.代理 代理型人工智能系统的特点是能够在没有事先指定行为的情况下,在很长一段时间内持续采取有助于实现目标的行动…

选择移动订货系统源码的四大原因

移动订货系统需要选择源码支持的厂家,有以下四个原因,其中第四个是比较重要的,大家点个关注点个赞,我们接着往下看。 1.可自行定制:支持源码的移动订货系统可以根据企业的具体需求进行定制开发,满足企业特定…

【Midjourney】Midjourney根据prompt提示词生成人物图片

目录 🍇🍇Midjourney是什么? 🍉🍉Midjourney怎么用? 🔔🔔Midjourney提示词格式 Midjourney生成任务示例 例1——航空客舱与乘客 prompt prompt翻译 生成效果 大图展示 细节大…

Java整合APNS推送消息-IOS-APP(基于.p12推送证书)

推送整体流程 1.在开发者中心申请对应的证书(我用的是.p12文件) 2.苹果手机用户注册到APNS,APNS将注册的token返回给APP(服务端接收使用)。 3.后台服务连接APNS,获取连接对象 4.后台服务构建消息载体 5.后台…

FreeRTOS之队列集操作(实践)

多个任务在在同一队列中传递的同一种数据类型,而队列集能够在任务之间传递不同的数据类型。 配置流程:(更详细流程参考正点原子的教程) 1、启用队列集将configUSE_QUEUE_SETA置1) 2、创建队列集 3、创建队列或信号…

openGauss学习笔记-169 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用DML命令更新表

文章目录 openGauss学习笔记-169 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用DML命令更新表169.1 操作步骤 openGauss学习笔记-169 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用DML命令更新表 openGauss支持标准的数据库操作语言&#xff08…

【Java JMM】编译和优化

1 前端编译 在 Java 技术下, “编译期” 是一个比较含糊的表述, 因为它可能指的是 前端编译器 (“编译器的前端” 更准确一些) 把 *.java 文件转变成 *.class 文件的过程Java 虚拟机的即时编译器 (常称 JIT 编译器, Just In Time Compiler) 运行期把字节码转变成本地机器码的过…

基于Java+Swing大鱼吃小鱼(期末95分以上)

基于JavaSwing大鱼吃小鱼 一、系统介绍二、效果展示1.视频演示2.运行效果 三、其他系统实现四、获取源码 一、系统介绍 1.GWindow类:窗口的绘制,继承JFrame类,其主要设置的内容有: 窗口的相关信息:宽度、…

React学习计划-React16--React基础(二)组件与组件的3大核心属性state、props、ref和事件处理

1. 组件 函数式组件&#xff08;适用于【简单组件】的定义&#xff09; 示例&#xff1a; 执行了ReactDOM.render(<MyComponent/>, ...)之后执行了什么&#xff1f; React解析组件标签&#xff0c;找到了MyComponent组件发现组件是使用函数定义的&#xff0c;随后调用该…

嘉康利新品VIVIX软糖面世中国

中国区总经理登台演绎劲舞“科目三”&#xff0c;你敢想&#xff1f;嘉康利中国总经理冉永夫再一次用惊艳众人的创意打破了你的认知。 这一幕发生在12月10日在苏州国际博览中心举办的嘉康利新产品发布盛典上。盛典开场&#xff0c;冉永夫便领衔经销商和专业舞者&#xff0c;用一…

EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)

EfficientDet: Scalable and Efficient Object Detection EfficientDet&#xff1a;可扩展和高效的目标检测 摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了用于目标检测的神经网络架构设计选择&#xff0c;并提出了几个关键的优化方法来提高效率。首先&…

教你在Linux上安装Node并用Electron打包deb和rpm包

Windows下无法打linux版本的包&#xff0c;如果你要打linux系统的amd64架构需要找一台linux amd64的系统打包&#xff0c;也可以在amd64下打arm架构的包&#xff0c;但是不能运行&#xff0c;需要放到arm架构的系统里才能运行。 下载linux的node环境 Index of /nodejs-releas…

Leetcode 134 加油站

题意理解&#xff1a; 给定n个站点&#xff0c;两个数组gas表达每个站点可加的油量&#xff0c;cost表达到下一站点所需耗费的油量。 gas [1,2,3,4,5], cost [3,4,5,1,2] 要求从下表为i的站点开始&#xff0c;刚好能支撑汽车在每个站点转一圈后回到出发位置。 解题思路&#…

Deployment Controller详解(上)

上一篇在《Kubectl 部署无状态应用》中介绍了如何使用 Deployment 部署五个 hello world 实例时&#xff0c;我们并没有详细探讨 Deployment Controller 的各项功能。因此&#xff0c;本文将深入介绍 Deployment Controller 的作用以及它能够完成的任务。 本文来自官方文档梳理…

CAS机制

Java中提供了很多原子操作类来保证共享变量操作的原子性。这些原子操作的底层原理都是使用了CAS机制。在使用一门技术之前&#xff0c;了解这个技术的底层原理是非常重要的&#xff0c;所以本篇文章就先来讲讲什么是CAS机制&#xff0c;CAS机制存在的一些问题以及在Java中怎么使…

浅谈测试自动化selenium之POM模式

基于本人也是一个初学者&#xff0c;在运用POM模式的时候记录一下自己的学习笔记。 如果你是大神&#xff0c;那么可以略过&#xff0c;如果你是初学者&#xff0c;希望对你有帮助。 本文阐述了以下几个问题&#xff1a; 什么叫POM模式 为什么要用POM模式 POM模式的思想 POM模…

前端案例—antdDesign的Select多选框组件加上全选功能

前端案例—antdDesign的Select多选框组件加上全选功能。 实现效果如下&#xff1a; Select 组件里有这个属性&#xff0c;可以利用这个对下拉菜单进行自定义。 const handleChange (e, value) > {setSelectState(e.target.checked)let arr productOptions?productOption…

AI绘画中CLIP文本-图像预训练模型

介绍 OpenAI 在 2021 年提出了 CLIP&#xff08;Contrastive Language–Image Pretraining&#xff09;算法&#xff0c;这是一个先进的机器学习模型&#xff0c;旨在理解和解释图像和文本之间的关系。CLIP 的核心思想是通过大规模的图像和文本对进行训练&#xff0c;学习图像…

口碑好的国产主食冻干猫粮品牌有哪些?盘点十大放心猫粮国产名单

冻干猫粮可以帮助猫咪摄入更多的水分&#xff0c;因为冻干是高蛋白质的食物&#xff0c;当猫咪吃了冻干猫粮后&#xff0c;会感到口渴&#xff0c;从而更主动地去喝水。对于那些不喜欢喝水的猫咪&#xff0c;可以将冻干复水后再喂给它们&#xff0c;这样也可以增加猫咪的水分摄…

Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)

步骤一&#xff1a;管脚配置确认。 ①配置定时器的管脚模式为复用推挽输出模式&#xff08;GPIO_MODE_AF_PP&#xff09;&#xff01;&#xff01;&#xff01;&#xff0c;注意&#xff1a;复用开漏模式软件仿真时无波形。 步骤二&#xff1a;编译程序。 ①点击编译按钮。 …