Spring Cloud 微服务框架测试一些暴露出来的 API 接口,发现测试站可以执行,但到了正式站却被拒绝了:

Failed to handle request [POST http://xxx/path/api/xxx]

而一些其他的请求,如:[POST http://xxx/path/to/xxx] 是可以正常访问的。也就是说正式站拒绝了非 /path/to 路由的请求。

反馈给之前负责的同事,才知道原来是在网关配置了断言(会限制路由访问):

- id: app-id
  uri: lb://app-id
  predicates:
    - Path=/path/to/**
  filters:
    - StripPrefix=1
    - name: Retry
      args:
        retries: 1

测试站只所以没有被拦截,是因为使用了 ip 直接访问业务应用,没有经过网关。而正式站使用域名,且有多台服务器做负载,需要网关配置转发。

所以现在需要增加 /path/api/** 路由即可。百度 predicates 参数如何配置多个 path,得到只需要增加英文逗号分隔就好。最终的网关配置:

- id: app-id
  uri: lb://app-id
  predicates:
    - Path=/path/to/**,/path/api/**
  filters:
    - StripPrefix=1
    - name: Retry
      args:
        retries: 1