天天看点

Zuul网关无法路由请求

最近在做的一个需求,需要对外部访问微服务的接口进行token鉴权,想来想去还是用网关合适。因为公司原来有用的zuul网关但是没有上线,所以这次我就想把原来的网关服务整合进去。以前只看过zuul的一些资料并没有动手实战过,所以实战中还是踩了些坑,浪费了很多时间和精力,这就是只看不动手的坏处啊!

以下是入门遇到的小问题

网关已启动,状态也正常/info端点也可被访问,但是无法路由请求的话,多半是路由规则和访问路径对应不上的原因!

1. 路由规则

例:某公司的订单模块

原访问微服务时的路径/jd/order/12345

zuul网关地址10.1.1.9:9090

zuul网关配置路由

zuul:
  routes:
    order: /jd/order/**
           

如果我们要通过网关路由,则需要直接访问zuul网关服务的端口,然后加上路由,再加上接口路径。

实际访问路径:

http://10.1.1.9:9090/jd/order/jd/order/12345

zuul会帮你截掉路由匹配的前缀,然后转发到对应的order服务接口/jd/order/12345

公司的项目部署在nginx中,所以我直接改nginx的location到upstream负载均衡到相应的多个网关服务器,还是挺方便的。

2.token不被转发

zuul默认会过滤掉Authorization敏感词,所以token默认不会被转发到后端微服务去。

解决:

网上另外有种在yml文件中配置的

zuul:
  sensitive-headers: Set-Cookie、Cookie、Host、Connection、Content-Length、Content-Encoding、Server、Transfer-Encoding、X-Application-Context
           

但是我用这个方式启动服务会报错,所以就选择第一中代码的方式了。

3.除了网关服务,其他微服务接口仍可以被访问

例如:我知道了微服务部署所在的ip端口,我就可以直接去访问该微服务的接口。

据我了解这个还需要整合一些权限框架去做,spring security和shiro之类的。