Gateway配置网关路由和路径重写
Gateway
网关重写路由路径
请求一般都是先到达网关,网关先利用断言来判定此次请求是否符合某个路由规则,如果符合路由规则,就会按照这个路由规则,经过一系列的过滤器过滤之后,发送到指定的地方
在application.yaml文件中可以配置网关的路由
spring: cloud: gateway: routes: - id: admin_route uri: lb://xxxxxx predicates: - Path=/api/**
但是经过网关路由之后的一些请求由于url地址会有些变动,导致404找不到网页 请求来到网关会判断满足/api/这个前缀要求,然后上会从nacos注册中心找到指定微服务的地址/xxxxxx,实际上这个请求会被转到http://xxxxxx:8080/api/captcha.jpg,即将网关地址转换成指定的微服务地址,然后再直接拼接上后边的地址。这就有可能导致微服务地址不一致,进而报404
此时需要根据微服务实际的URL地址重写路径,根据Spring官网文档,通过网关的过滤器,使用正则表达式可以重写路径 重写路径
spring: cloud: gateway: routes: - id: admin_route uri: lb://xxxxxx predicates: - Path=/api/** filters: - RewritePath=/api/?(?<segment>.*),/xxxxxx/${ segment}
意思是将从网关过来的请求,去掉/api/,使用指定的url代替,即将/xxxxxx/替换掉/api/ 这样访问http://localhost:88/api/captcha.jpg实际上是访问的http://localhost:8080/xxxxxx/captcha.jpg 这样就实现了对网关路由的重写