百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

解析HTTP请求从NG到网关再到具体服务的流程

off999 2025-03-30 19:49 29 浏览 0 评论

数据模拟:

1.前端请求url:
http://www.mum-baby.com/api/order/buy

2.网关3台机器,网关实例IP为10.0.1.101~103

整体请求如下

用户 → DNS域名解析→ 云负载均衡器(SLB/ALB) → Nginx集群(多台ECS) → Spring Cloud Gateway → 订单服务(Order Service)

1. 云负载均衡器配置(以阿里云SLB为例)

核心配置步骤

1.1 创建负载均衡实例

(1)类型:选择「应用型负载均衡(ALB)」或「四层负载均衡(SLB)」。

(2)网络类型:公网或私网(根据业务需求)。

1.2 配置监听器

(1)前端协议:HTTP/HTTPS(如启用HTTPS需上传证书)。

(2)端口:80(HTTP)或 443(HTTPS)。

(3)后端协议:HTTP,端口80(指向Nginx集群)。

1.3 添加后端服务器组

将多台Nginx服务器(ECS实例)添加到服务器组。

健康检查

(1)检查路径:/health(需在Nginx配置健康检查端点)。

(2)检查间隔:5秒。

(3)超时时间:2秒。

(4)健康阈值:2次成功标记节点健康。

(5)不健康阈值:3次失败标记节点不健康。


2.Nginx配置(每台ECS实例)

# 定义Spring Cloud Gateway集群(假设网关实例IP为10.0.1.101~103)
upstream spring_cloud_gateway {
    server 10.0.1.101:8080 weight=5;  # 权重配置
    server 10.0.1.102:8080 weight=3;
    server 10.0.1.103:8080 weight=2;
    keepalive 32;  # 连接池复用,减少TCP握手开销
}

server {
    listen 80;
    server_name www.mum-baby.com;

    # 健康检查端点(供云负载均衡器调用)
    location = /health {
        access_log off;
        return 200 "OK";
    }

    # 静态资源缓存(图片、CSS/JS)
    location ~* \.(jpg|png|css|js)$ {
        root /data/static;
        expires 30d;
        access_log off;
    }

    # 动态请求转发至Spring Cloud Gateway
    location / {
        proxy_pass http://spring_cloud_gateway;
        proxy_set_header Host $host;              # 透传域名
        proxy_set_header X-Real-IP $remote_addr;  # 透传用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 代理链IP记录

        # 性能优化
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_connect_timeout 3s;    # 连接网关超时时间
        proxy_read_timeout 10s;      # 读取网关响应超时时间

        # 容错机制
        proxy_next_upstream error timeout http_500 http_502 http_503;
    }
}

配置解析

  • 健康检查:云负载均衡器通过/health端点定期检查Nginx存活状态。
  • 静态资源缓存:直接由Nginx处理,减少网关压力。
  • 动态请求转发:所有非静态请求均转发至Spring Cloud Gateway集群,通过upstream实现负载均衡。

3. Spring Cloud Gateway配置

核心配置:路由规则与鉴权

spring:
  cloud:
    gateway:
      routes:
        - id: order-service
          uri: lb://order-service  # 通过服务名负载均衡(需集成注册中心如Nacos)
          predicates:
            - Path=/api/order/**   # 匹配路径规则
            - Host=www.mum-baby.com  # 仅处理指定域名的请求
          filters:
            - StripPrefix=1         # 去掉前缀/api/order
            - AddRequestHeader=X-User-Id, ${header.Authorization}  # 透传用户身份
      # 集成Sentinel限流
      sentinel:
        enabled: true
        eager: true
        transport:
          dashboard: localhost:8080
  # 注册中心配置(以Nacos为例)
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 10.0.2.100:8848

配置解析

  • 路由规则
    • 将/api/order/**的请求路由至order-service服务。
    • 使用lb://order-service表示通过注册中心(如Nacos)动态发现服务实例。
  • 过滤器
    • StripPrefix=1:移除路径前缀/api/order,实际转发路径为/buy。
    • AddRequestHeader:透传用户身份信息(如JWT Token)。
  • 限流集成:结合Sentinel实现熔断与限流,保护订单服务。


4.完整请求流程示例

用户请求:
http://www.mum-baby.com/api/order/buy

4.1DNS解析

域名www.mum-baby.com解析到云负载均衡器的公网IP(如120.76.25.100)。

4.2云负载均衡器处理

根据配置的负载均衡算法(如加权轮询),将请求分发到某一台Nginx服务器(如ECS实例10.0.1.1:80)。

4.3 Nginx转发至网关

  • Nginx根据location /规则,将请求转发至spring_cloud_gateway集群中的某个网关实例(如10.0.1.101:8080)。
  • 请求头透传:
Host: www.mum-baby.com
X-Real-IP: 123.60.25.17(用户真实IP)
X-Forwarded-For: 123.60.25.17, 10.0.1.1(Nginx IP)

4.4 Spring Cloud Gateway路由

(1)网关根据Path=/api/order/**和Host=www.mum-baby.com匹配路由规则。

(2)移除路径前缀/api/order,转发请求至order-service服务的/buy端点。

(3)通过注册中心(Nacos)获取order-service的实例列表(如10.0.3.101:8080)。

4.5 订单服务处理

(1)订单服务接收请求,执行库存扣减、生成订单等逻辑。

(2)返回响应(如{"orderId": "20231001123456"}),沿原路返回至用户。

相关推荐

宏基acer官网商城(宏基官方商城)

宏碁本本底部有个序列号标签,不是粉色的那个,粉色的是系统的序列号,白色的是本本的出厂序列号,上宏碁官网查查你的序列号就知道真假了。在盖子的后面就可以查询到序列号,或者是去网上查询宏碁笔记本在官网下...

网盘在哪里打开(华为网盘在哪里打开)

给你的是一个网盘地址吧,直接把这个地址放到浏览器地址栏就好了,如果有提取码,他会提示你输入提取码的。一般都是在网上找到百度云链接,然后把文件保存在自己的百度网盘文件夹里面的。打开百度网盘app,...

win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
win7sp1专业版(win7专业版vl)

Win7系统SP1是系统发布后第一个SP包x64是64位操作系统。Windows7指的是微软公司的Windows7操作系统ultimate指的是旗舰版(with表示伴随,说明这是提供商所提供...

手写输入法手写板怎么设置(手写输入法手写板怎么设置 iphone)

手写输入法设置方法:1、打开手机至桌面主页,保持手机处于工作状态;  2、在手机桌面主页列表找到设置,点击打开并进入设置主界面;  3、在设置主界面找到系统设置选项,点击打开并进入系统设置主界面;  ...

推荐杀毒软件(下载杀毒软件最新版)
推荐杀毒软件(下载杀毒软件最新版)

好的杀毒软件有360杀毒,金山毒霸,AVG杀毒等等。1,360杀毒,品牌介绍:360安全卫士品牌是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐...

2025-11-12 08:51 off999

百度云盘官网(百度云盘官网下载)

网盘在手机上面仅仅是一个图标,他是不占用手机硬盘的,当然,如果你从网盘上下载了文件到本地,下载的文件就会占用手机的硬盘空间。要找到这个文件,可以通过文件管理器来进行查找,也可以通过路径的方式来查找,但...

路由器设置管理系统(路由器设置管理员密码怎么设置)
路由器设置管理系统(路由器设置管理员密码怎么设置)

电脑端:把华为路由器接通电源,并开启WIFI,如果你使用电脑PC端,请使用网线连接路由器;成功连接到路由器之后,打开电脑浏览器,在浏览器中输入IP地址:192.168.3.1即可进入华为路由器管理界面;进入我要上网页面。在上网方式下拉框中,...

2025-11-12 07:51 off999

win10家庭版密钥在哪里看(windows10家庭版密钥在哪里)

要查看Windows10系统的激活密钥,请按照以下步骤操作: 1.点击“开始”菜单,然后选择“设置”(齿轮图标)。 2.在“设置”窗口中,选择“更新和安全”。 ...

两个wifi路由器怎么连接(两个wifi路由器设置方法)

无线路由器再连接一个无线路由器的设置方法如下:一、主路由器设置方法:先将网线(总线)插在无线路由器的WAN口,用一条网线一头插入无线路由器的任意LAN口一头连接电脑网卡,开启路由器的电源。电脑打开浏览...

windows7的安装过程(windows7安装步骤有哪些)

安装教程注意事项:1、本系统可以直接安装,不需要制作U盘启动盘,适合能正常开机的电脑。2、安装系统后C盘(包括桌面)数据会丢失,重要的东西请自行备份。3、此安装方法只适用于当前系统为XP、Win7、W...

惠普打印机插件手机版(惠普打印插件app)

您好,感谢您选择惠普产品。不是所有的打印机都可以实现手机打印功能的。一般来说支持ariprint的打印机,并且手机也有该功能,才能实现打印功能。如果您不需要实现打印功能,那么这个插件对您来说可能用处不...

电脑热点怎么禁止别人连接(怎么让电脑的热点不被关闭)

方法/步骤1/7首先,在我们的屏幕上找到“设置”。2/7点击进入设置之后,正数第三位就是个人热点。3/7在个人热点中,我们可以设置热点密码,开启关闭热点。4/7排名第三的是连接管理,可以设置允许一个至...

常用浏览器有哪些

电脑常用浏览器好用的方法步骤1从用户体验和功能扩展性来看,Chrome是最好用的浏览器。2Chrome拥有快速的页面加载速度、优秀的标签页管理和内置的开发者工具等功能,还有不断更新的扩展程序,能够...

u盘怎么取消读写保护(优盘怎么去掉读写保护)

如果您的U盘启动了读写保护,那么就无法进行数据的读取和写入操作。以下是一些可能的解决方法:1.检查开关或按钮:一些U盘有物理开关或按钮,用于启用或禁用读写保护。您可以检查一下U盘上是否有这样的开关或...

取消回复欢迎 发表评论: