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;   # 记录真实发出请求的客户端IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息
	}
}

admin-gateway网关配置

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

admin-server微服务配置

server:
  port: 51806
spring:
  application:
    name: admin-server
  cloud:
    nacos:
      discovery:
        server-addr: x.xx.xx.xx:8848
      config:
        server-addr: x.xx.xx.xx:8848
        file-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。

相关推荐
DY009J10 分钟前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器
什么鬼昵称1 小时前
Pikachu- Over Permission-垂直越权
运维·服务器
码农小白1 小时前
linux驱动:(22)中断节点和中断函数
linux·运维·服务器
4647的码农历程1 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
醉颜凉2 小时前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证
C++忠实粉丝2 小时前
Linux环境基础开发工具使用(2)
linux·运维·服务器
康熙38bdc3 小时前
Linux 环境变量
linux·运维·服务器
存储服务专家StorageExpert3 小时前
DELL SC compellent存储的四种访问方式
运维·服务器·存储维护·emc存储
攸攸太上3 小时前
JMeter学习
java·后端·学习·jmeter·微服务
大G哥4 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes