赞
踩
今天,做项目的时候做项目的时候配路由出现bug,特此理顺一下从nginx到微服务网关再到微服务这一过程。
nginx配置
upstream admin-gateway{ server localhost:21217; } server { listen 8803; location / { root F:/develop/admin-web/; index index.html; } location ~/service_6001/(.*) { 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 :
微服务网关:
admin-server 微服务:
综合起来,前端的请求首先到达Nginx,根据配置的规则,如果 URL 符合 /service_6001/(.*),则会被转发到 admin-gateway微服务网关。网关根据配置的路由将请求转发到对应的 admin-server 微服务上,进行处理。整个过程中,Spring Cloud Gateway 作为微服务网关起到了路由转发和过滤器的作用,Nacos则作为服务注册中心和配置中心,管理着服务的注册与发现以及配置的管理。
如果一个请求是http://localhost:8803/service_6001/admin/login/in,这个请求如何变化
当收到这个请求时,根据前面提到的 Nginx 配置,它会匹配到 **~/service_6001/admin(.*)**的正则表达式规则。因此,这个请求将被转发到
http://admin-gateway/admin/login/in
根据 admin-gateway 微服务网关的配置,这个请求会进一步被路由到 admin-server微服务上,但在路由过程中,网关会将路径中的前缀 /admin 去掉,因为配置中包含了过滤器
StripPrefix=1。所以最终请求到达 admin-server 微服务的路径是 /login/in,完整的目标路径是http://admin-server:51806/login/in。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。