nginx反向代理----->微服务网关----->具体微服务

今天,做项目的时候做项目的时候配路由出现bug,特此理顺一下从nginx到微服务网关再到微服务这一过程。
在这里插入图片描述

nginx配置

upstream  admin-gateway{server localhost:21217;
}server {listen 8803;location / {root F:/develop/admin-web/;index index.html;}location ~/service_6001/admin(.*) {proxy_pass http://admin-gateway/$1;proxy_set_header HOST $host;  # 不改变源请求头的值proxy_pass_request_body on;  #开启获取请求体proxy_pass_request_headers on;  #开启获取请求头proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息}
}

admin-gateway网关配置

server:port: 21217
spring:application:name: admin-gatewaycloud:nacos:discovery:server-addr: x.xx.xx.xx:8848config:server-addr: x.xx.xx.xx:8848file-extension: ymlcloud:gateway:globalcors:cors-configurations:'[/**]': # 匹配所有请求allowedOrigins: "*" #跨域处理 允许所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETEroutes:# 管理微服务- id: adminuri: lb://admin-serverpredicates:- Path=/admin/**filters:- StripPrefix= 1

admin-server微服务配置

server:port: 51806
spring:application:name: admin-servercloud:nacos:discovery:server-addr: x.xx.xx.xx:8848config:server-addr: x.xx.xx.xx:8848file-extension: yml

以上就是三者配置,并且网关和微服务已经注册到nacos注册中心。接下来我们理一下,从前端nginx是如何到后端微服务的。

前端 Nginx

  1. Nginx 通过配置文件指定了监听的端口号为 8803。
  2. 当收到请求时,如果 URL 匹配了**~/service_6001/admin(.*)** 的正则表达式,则会转发到 http://admin-gateway/$1
  3. 请求转发时,Nginx 会保留原始请求头,并添加额外的代理头信息。admin-gateway

微服务网关

  1. 该微服务网关监听在端口 21217。 使用 Spring Cloud Gateway 实现,在配置中指定了 Nacos 注册中心的地址。
  2. 配置了一个路由 admin,匹配路径为 /admin/**,转发到 lb://admin-server,这里的 lb://意味着使用负载均衡。
  3. 这里的路由也包含了一个过滤器 StripPrefix=1,用于去掉路径中的前缀,保证请求能够正确到达微服务。

admin-server 微服务

  1. 该微服务监听在端口 51806。 也使用了 Nacos 作为注册中心,并指定了配置中心的地址。

综合起来,前端的请求首先到达Nginx,根据配置的规则,如果 URL 符合 /service_6001/admin(.*),则会被转发到 admin-gateway微服务网关。网关根据配置的路由将请求转发到对应的 admin-server 微服务上,进行处理。整个过程中,Spring Cloud Gateway 作为微服务网关起到了路由转发和过滤器的作用,Nacos则作为服务注册中心和配置中心,管理着服务的注册与发现以及配置的管理。

举例

如果一个请求是http://localhost:8803/service_6001/admin/login/in,这个请求如何变化

  1. 当收到这个请求时,根据前面提到的 Nginx 配置,它会匹配到 **~/service_6001/admin(.*)**的正则表达式规则。因此,这个请求将被转发到
    http://admin-gateway/service_6001/admin/login/in

  2. 根据 admin-gateway 微服务网关的配置,这个请求会进一步被路由到 admin-server微服务上,但在路由过程中,网关会将路径中的前缀 /service_6001/admin 去掉,因为配置中包含了过滤器
    StripPrefix=1。所以最终请求到达 admin-server 微服务的路径是 /login/in,完整的目标路径是http://admin-server:51806/login/in。

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

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

相关文章

十六、Vben框架table内部合并行

在vben项目中合并内部的行是一个常规的操作,以前我们说过如果是一条数据内部只需要分割拿高撑开就可以实现,在第三章的时候我们已经讲过了,那么如果是不定的条数合并为一条数据呢,怎么能够实现呢,下面我们就来讲讲。 先看效果图 如图,能看到是三条数据,其实是…

数据库复试—SQL查询举例

数据库复试—SQL查询举例(续) 单表查询实例 查询年龄在20到23岁之间的学生信息 select * from student where sage between 20 and 30; ------------------------------------- | Sno | Sname | Ssex | Sage | Sdept | -------------------------…

【Django-ninja】django ninja中使用查询过滤器FilterSchema

Django ORM中过滤器 filter的基本用法 filter() 是 QuerySet 对象的一个方法,用于从数据库中过滤数据。它接受一个或多个关键字参数,每个参数都表示一个查询条件,它们之间是 AND 关系。 以下是 filter() 方法的基本用法示例: fr…

基于springboot+vue的旅游管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究现状…

mysql - 笔记

对于C++开发者来说,连接MySQL数据库的库也有几个选择。以下是一些支持Windows和Linux的MySQL C++库: MySQL Connector/C++: MySQL Connector/C++是MySQL官方提供的C++连接器库,它提供了对MySQL数据库的高性能访问。它支持Windows和Linux系统,并提供了面向对象的API,使得与…

Flutter 各种Demo效果合集

Flutter 各种Demo实现效果: github:GitHub - PangHaHa12138/FlutterDemo: Flutter 各种Demo效果合集 1:2种 仿朋友圈 效果,顶部拉伸 和 不拉伸 2:仿抖音上下滑动视频播放 3:视频直播(使用的电视台的m3u…

Linux查询日志命令

Linux查询日志 常见的问题排查有,k8s、arthas、堡垒机… 找到本电脑的 longs 日志文件夹,里面有error 日志… 常见的错误日志查看命令有: -- 查询错误日志 所有的错误日志 cat error.2024-02-02 -- 指定过滤条件 cat error.2024-02-02…

考研经验总结——考试期间

文章目录 一、订房二、看考场三、休息四、考前带宾馆的书五、安全 一、订房 我刚刚看了看,是9.10号订的酒店。你们可以提前向学长学姐打听你的考场在哪个学校(徐州的考生,考省外的学校是在矿大考试,考省内的学校是在江师大&#…

Apache SeaTunnel (不含web) Window11 本机搭建(非源码)

启动环境 需要提前准备的(只提供作者试过且可行的方案) window11ubuntu20(wsl2) window11内置ubuntu的方式自行百度,此处不做陈述jdk8mysql8navicatvscode 环境准备不做过多陈述,以下是正式的安装启动步骤 SeaTunnel 2.3.3 资源准备 第一步: 创建文件…

spring常用语法

etl表达式解析 if (rawValue ! null && rawValue.startsWith("#{") && entryValue.endsWith("}")) { // assume its spel StandardEvaluationContext context new StandardEvaluationContext(); context.setBeanResolver(new Be…

Task05:PPO算法

本篇博客是本人参加Datawhale组队学习第五次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

vs +cmake 开发的注意

vs自动生成的cmake 项目在项目顶目录会有 一个cmakepresets.json文件 在cmake文档里 该文件是对cmake的某些变量进行提前预设. 引入标头的问题: CMAKE_BUILD_TYPE 设置为Release vs不会自动给你找标头 甚至不会给你自动提示 设置为 Debug 即可 在cmake 项目里面 如果对某…

Redis的big key问题介绍以及监控手段

本文目录: 1、big key的定义及问题 2、2023年实际生产事故 3、监控手段 4、预防手段 (一)big key的定义及产生的问题 Redis 的big key是指value占用内存空间较大的键值。通常,针对不同的数据类型会用元素个数或者占用空间大小…

2024年混合云:趋势和预测

混合云环境对于 DevOps 团队变得越来越重要,主要是因为它们能够弥合公共云资源的快速部署与私有云基础设施的安全和控制之间的差距。这种环境的混合为 DevOps 团队提供了灵活性和可扩展性,这对于大型企业中的持续集成和持续部署 (CI/CD) 至关重要。 在混…

基于springboot+vue的阿博图书馆管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

JRE和JVM的区别

JRE(Java Runtime Environment,Java运行环境)和JVM(Java Virtual Machine,Java虚拟机)是Java运行时环境的重要组成部分,它们之间主要有以下区别: 功能不同:JRE是Java运行…

Pandas 数据结构 – Pandas CSV 文件

Pandas CSV 文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 CSV 是一种通用的、…

06. 【Linux教程】终端工具

Linux 终端工具 前面介绍了如何安装虚拟机,还介绍了如何在虚拟机上安装 CentOs 操作系统,并且给 CentOs 配置了局域网固定 ip,那么此时的 CentOs 相当于是在局域网的一台服务器了,虚拟机上面已经自带终端工具,实际业务…

上传upload及显示img图片预览、删除

上传图片文件a-upload html部分 <div className="clearfix"><a-upload:custom-request="customRequest"listType="picture-card":fileList="fileList":onPreview="handlePreview":on-remove="del">&…

day39_mysql

今日内容 0 复习昨日 1 DML 2 约束 3 DQL 0 复习昨日 1 什么是数据库(Database)? 用来组织,存储,管理数据的仓库 2 什么是数据库管理系统(Database Management System-DBMS)? 用来管理数据库的一个软件 3 数据库分类 关系型数据库,Oracle,Mysql,SqlServer,DB2非关系数据库,Re…