Spring Cloud Gateway 2.5配合Eureka手动路由返回404如何修复
Spring Cloud Gateway 手动路由返回404问题修复方案
1. 基础依赖校验
- 必须显式引入
spring-cloud-starter-loadbalancer依赖,Spring Cloud 2020及以上版本已移除Ribbon组件,手动配置lb://前缀的路由时,必须依赖LoadBalancer组件才能解析服务名、实现负载均衡转发。 - 确认已关闭服务自动发现特性,在配置文件中添加
spring.cloud.discovery.enabled=false,避免自动生成的路由和手动配置的路由规则冲突。
2. 路由规则配置校验
参考标准手动路由配置结构:
spring: cloud: gateway: routes: - id: custom-service-route # 路由唯一标识,不可重复 uri: lb://YOUR-SERVICE-NAME # 服务名必须和Eureka注册中心显示的大小写完全一致 predicates: - Path=/service-prefix/** # 路径匹配规则,/**不可省略,否则无法匹配子路径 filters: # 如果需要去掉匹配的前缀再转发到后端,添加StripPrefix过滤器,数字对应要去掉的路径层数 - StripPrefix=1
- 注意
lb://后的服务名必须和Eureka注册的服务名完全匹配,Eureka默认会将服务名转为大写存储,这里建议统一写大写服务名。 - 路径断言配置必须完整:如果需要匹配
/service-prefix下的所有子路径,末尾必须加/**,仅配置Path=/service-prefix只能匹配单个路径。 - 过滤器规则校验:如果访问网关的路径前缀不需要传递到后端服务,必须配置
StripPrefix过滤器。例如网关访问路径为http://网关地址/service-prefix/get/1,去掉第一层前缀后转发到后端的路径为/get/1,否则后端会收到完整的/service-prefix/get/1请求,若后端没有对应路径就会返回404。
3. 服务注册与负载均衡校验
- 确认网关服务可以正常连接Eureka,成功拉取到后端服务的实例列表,可以通过网关的启动日志查看服务拉取记录,也可以引入actuator依赖后访问
/actuator/gateway/routes端点查看已加载的路由规则是否符合预期。 - 确认后端服务在Eureka中的状态为UP,负载均衡器不会选择状态异常的实例进行转发。
4. 常见避坑提示
- 不要同时开启
spring.cloud.gateway.discovery.locator.enabled=true,该配置会开启基于服务发现的自动路由,和手动路由规则会产生冲突。 - 不要配置重复前缀的路由规则,优先级低的路由会被高优先级的规则覆盖,无法生效。
- 若使用了
PrefixPath等路径拼接过滤器,需要确认拼接后的路径是否是后端服务实际存在的路径,避免拼接出错。
内容的提问来源于stack exchange,提问作者Gerry Gry
相关产品推荐
相关产品推荐

