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

今天,做项目的时候做项目的时候配路由出现bug,特此理顺一下从nginx到微服务网关再到微服务这一过程。
nginx反向代理----->微服务网关----->具体微服务_第1张图片

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。

你可能感兴趣的:(bug记录,Java,Java学习日志,nginx,微服务,运维)