因为目前的Spring Cloud的中文资料真的很少,stripPrefix,先来了解一下什么是Prefix,有一个叫zuul.prefix,
zuul.prefix=/api
用户微服务和eureka已经起好了,看一下prefix是干嘛用的
localhost:8040/api/microservice-simple-provider-user/simple/1
前缀加上用户微服务的id,微服务的路径,prefix是干这个用的,stripPrefix是干嘛用的呢,
选项默认是true
zuul:
routes:
users:
path: /myusers/**
stripPrefix: false
zuul.strip-prefix=false
zuul.routes.user-route.stripPrefix=false
剥掉前缀,设置成false,
localhost:8040/api/microservice-simple-provider-user/simple/1
这个路径访问不了
是把api/这个去掉吗
localhost:8040/microservice-simple-provider-user/simple/1
也访问不了,我们借助日志
loggin.level.com.netflix=debug
logging.level.com.learn=trace
logging.file=springboot.log
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n
我们看他请求到了什么地址,我们访问这个
localhost:8040/api/microservice-simple-provider-user/simple/1
看到请求到哪里
zuul.prefix=/simple
zuul.stripPrefix=false
localhost:8040/simple/microservice-simple-provider-user/simple/1
也就是zuul代理的微服务的前缀,homePage是7900,有的微服务可能设置了context-path,
localhost:7900/simple/1
zuul.prefix=/simple
localhost:8040/simple/microservice-simple-provider-user/simple/1
zuul.prefix=/simple
zuul.stripPrefix=true
https://github.com/spring-cloud/spring-cloud-netflix/issues/1365
zuul.stripPrefix=false not work for all route? #1365
zuul.stripPrefix specifically applies to zuul.prefix. zuul.routes.<route>.stripPrefix
applies to zuul.routes.<route>.path
zuul:
ignoredPatterns: /**/admin/**
routes:
users: /myusers/**
忽略某些敏感的路径
zuul:
ignoredServices: '*'
routes:
users: /myusers/**
ignoredServices是粗粒度的忽略,他忽略的整个微服务
https://blog.csdn.net/kevin_loving/article/details/80661259
ignoredPatterns这个就可以做到更细粒度的忽略,忽略某些路径,这样配这里解释的很好,
https://cloud.spring.io/spring-cloud-netflix/reference/html/#_ignored_headers
The preceding example means that all calls (such as /myusers/101) are forwarded to /101
on the users service. However, calls including /admin/ do not resolve.
zuul:
ignoredPatterns: /**/admin/**
routes:
users: /myusers/**
zuul:
routes:
users:
path: /myusers/**
legacy:
path: /**
users下是/myusers/**这么玩的,剩下的是/**这么玩的,叫legacy路由,你想利用rule的order,所谓的优先级了,
现在优先级是什么,order是什么,你得用yaml,否则这个特性玩不起来
If you were to use a properties file, the legacy path might end up in front of the users path,
rendering the users path unreachable.
所有的路由都讲到这里
server.port=8040
spring.application.name=microservice-gateway-zuul-reg-exp
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
eureka.client.serviceUrl.defaultZone=http://admin:1234@10.40.8.152:8761/eureka
eureka.instance.appname=microservice-gateway-zuul-reg-exp
#zuul.prefix=/api
#zuul.routes.user-route.stripPrefix=false
zuul.prefix=/simple
zuul.stripPrefix=true
logging.level.com.learn=trace
logging.file=springboot.log
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n