自建网站怎么关闭,网页制作程序代码,金水区网站建设,app定制大概多少钱今天#xff0c;做项目的时候做项目的时候配路由出现bug#xff0c;特此理顺一下从nginx到微服务网关再到微服务这一过程。
nginx配置
upstream admin-gateway{server localhost:21217;
}server {listen 8803;location / {root F:/develop/admin-web/;index index.html;}…今天做项目的时候做项目的时候配路由出现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; # 记录真实发出请求的客户端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 1admin-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
Nginx 通过配置文件指定了监听的端口号为 8803。当收到请求时如果 URL 匹配了**~/service_6001/(.*)** 的正则表达式则会转发到 http://admin-gateway/$1。$1表示去掉一个请求路径请求转发时Nginx 会保留原始请求头并添加额外的代理头信息。admin-gateway
微服务网关
该微服务网关监听在端口 21217。 使用 Spring Cloud Gateway 实现在配置中指定了 Nacos 注册中心的地址。配置了一个路由 admin匹配路径为 /admin/**转发到 lb://admin-server这里的 lb://意味着使用负载均衡。这里的路由也包含了一个过滤器 StripPrefix1用于去掉路径中的前缀保证请求能够正确到达微服务。
admin-server 微服务
该微服务监听在端口 51806。 也使用了 Nacos 作为注册中心并指定了配置中心的地址。
综合起来前端的请求首先到达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 去掉因为配置中包含了过滤器 StripPrefix1。所以最终请求到达 admin-server 微服务的路径是 /login/in完整的目标路径是http://admin-server:51806/login/in。