一光年

[SpringCloud-Gateway] 使用Spring-Cloud-Gateway访问服务返回404的问题

2019.06.24

通过Gateway访问不到对应微服务接口的问题。已经确认以下状况:

  1. 服务名称是正确的
  2. 服务正常启动,能通过端口正常访问
  3. Gateway服务正常启动

application.yml的配置如下:

server:
  port: 9000
  
spring:
  application:
    name: ms-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false
      routes:
        - id: provider
          uri: lb://MS-PROVIDER
          predicates:
            - Path=/provider/**

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8765/eureka/
  instance:
    prefer-ip-address: true

看上去没有什么错误,运行正常的话,访问 http://localhost:9000/provider/xxx是应该与直接访问provider是结果一致的。

然而返回的结果却是404,说明服务没有找到对应的接口路径。

解决办法

原因在于转发以后的路径,没有去掉/provider这个前缀,需要设置配置项去除这个前缀。修改yaml配置文件如下:

...

spring:
  application:
    name: ms-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false
      routes:
        - id: provider
          uri: lb://MS-PROVIDER
          predicates:
            - Path=/provider/**
          filters:
            - StripPrefix= 1 // 将前缀路径strip掉
...