zuul的各种配置
我们知道我们前台要展示数据给用户看,这中间可能涉及到从后端的多个微服务进行获取数据。比如获取用户信息需要用到用户微服务、获取商品信息需要获取商品微服务、创建订单需要调用订单微服务,而各个微服务可能分布在各个机器上,前端要获取到数据就必须要知道各个微服务的地址,这给前端增加开发的复杂性。一段后端的某个微服务地址改变了,前端可能还要修改。而且后端各个微服务权限认证也不好认证,那么有没有一种好的解决办法呢?服务网关就正好可以解决这个问题,在 spring cloud 中使用的就是zuul来实现服务网关。我们来看一下有了服务网关后,前端程序调用后端服务。
由上可知,当存在服务网关,前端程序通过服务网关调用后台服务,同时我们也可以在网关层进行各种操作,比如限流、权限校验等。
实现功能
1、查看 zuul 中配置好的路由和过滤器信息
2、忽略所有微服务或某些微服务
3、忽略所有为服务,只路由指定的微服务
4、通过path和url访问到具体的某台机器上
5、脱离eureka进行访问,并使之具有负载均衡和隔离的机制等
6、转发前是否去掉路由前缀
7、为所有路由都增加一个通过的前缀
8、忽略某些路径不进行路由
9、敏感头的传递(比如Cookie等)全局设置和某个微服务设置
10、忽略头
11、spring security 在classpath 下会忽略的头
12、本地调换和路由的优先级
13、配置网关超时
14、重写 Location 头
15、文件上传处理
代码结构
eureka-server
|- 服务注册中心
zuul
product-provider-8202
product-provider-8203
|- 服务提供者
product-consumer-8201
|- 服务消费者
product-gateway-8204
|- 网关程序,演示网关路由的各种配置
代码编写
一、服务提供者、服务消费者、注册中心,没有什么需要特别注意的,略。
二、服务网关的编写
1、创建网关工程
2、引入 zuul 的依赖
3、启动类上增加 @EnableZuulProxy 注解
4、yml 文件上注册到 eureka 上
三、eureka服务启动界面

功能实现
1、查看 zuul 中配置好的路由和过滤器信息
当我们启动了zuul 的网关之后,想知道当前zuul代理了那些路由,访问的路径又是那些或者我们自己写了一个zuul的filter,想知道它当前位于zuul的filter的那个位置时,该如何查询。
访问路径: http://网关地址:端口/routes 访问路由的简单信息
http://网关地址:端口/routes?format=details 访问路由的详细信息
http://网关地址:端口/filters 访问zuul中使用了那些过滤器。
yml文件配置:
management:
security:
enabled: false # 默认值是 true, 为true的话那么页面上可能会报没有权限访问
不进行配置,访问上面的2个端点会报没有权限访问。
2、忽略所有微服务或某些微服务
默认情况下,只要引入了zuul后,就会自动一个默认的路由配置,但有些时候我们可能不想要默认的路由配置规则,想自己进行定义
忽略所有微服务:(后面写 * )
zuul:
ignored-services: "*"
忽略某些微服务:(直接写微服务的名字=>可以理解为spring.application.name的值,多个以都好分隔)
zuul:
ignored-services: product-provider,product-consumer-8201
3、忽略所有为服务,只路由指定的微服务

访问: http://gatewayhost:port/product/selectOne ===> 转发到 product-provider上的selectOne
四、通过path和url访问到具体的某台机器上
有时候我们测试的时候需要访问到具体的某台机器上,而不希望负载均衡到别的机器上或者需要访问到第三方的某台机器上。
zuul:
routes:
product-provider:
path: /product/**
url: http://localhost:8202/

注意:
1、product-provider 这个值可以随便写,即使是一个不存在的值
2、这种方式访问不会作为 HystrixCommand 来进行访问。
3、url 里面也不可以写多个url
五、脱离eureka进行访问,并使之具有负载均衡和隔离的机制等

运行结果:
六、转发前是否去掉路由前缀

七、为所有路由都增加一个通过的前缀
有些时候我们系统所有的路由都有一个统一的前缀进行访问,此时就可以使用 zuul.prefix 进行统一添加。

八、忽略某些路径不进行路由
有些时候,我们某些微服务的某些地址不希望被第三方客户调用到,需要被隐藏起来,此时就可以使用网关路由这些url不进行路由。
zuul:
ignored-patterns: /**/selectOne/**
routes:
product-provider: /product/**
注意: 这个忽略是全局忽略,即对所有的微服务都进行忽略
九、敏感头的传递(比如Cookie等)全局设置和某个微服务设置
有些时候我们微服务上游可能想传递一些请求头到下游的服务,比如Token、Cookie等值,默认情况下,zuul 不会将 Cookie,Set-Cookie,Authorization 这三个头传递到下游服务,如果需要传递,就需要忽略这些敏感头。
全局和局部设置敏感头:
运行结果:
注意:
1、可以看到访问 product 路由时,是可以获取到 敏感头中 cookie 的信息的,访问 consumer 路由无法获取到。
2、如果下游服务启用了hystrix,那么 RequestInterceptor 要想从 ThreadLocal 中获取request的值,需要将隔离策略修改成信号量。
十、忽略头 (链接)
有些时候,我们不想将某个头传递到其它所有的微服务中,就可以使用忽略头,忽略头是全局配置的,如果想在某个服务中忽略某个头,可以使用敏感头忽略。
zuul:
routes:
product-provider:
path: /product/**
serviceId : product-provider
ignored-headers: token # 全局忽略头,忽略 token 这个请求头,不向下游服务传递这个token请求头
zuul.ignored-headers: token 表示被zuul路由的服务都不会传递 token 这个请求头。
十一、spring security 在classpath 下会忽略的头
当我们的 spring security 在classpath中,zuul 会为我们增加一个默认的 spring security 相关的忽略头,如果我们不想要忽略,将 zuul. ignore-security-headers: false 就可以了。
# spring security 在classpath 下会忽略的头
zuul:
routes:
product-provider:
path: /product/**
serviceId : product-provider
ignore-security-headers: false # 为true会忽略spring security安全头,如果下游需要用到需要设置成false

十二、本地调换和路由的优先级
有些时候,我们页面上访问到的某些路径,想让网关直接进行处理,而不是直接转发到后端的服务上,此时就可以使用到路由的跳转。 有些时候 /product/ext/** 想路由到 product-provider-ext 服务上,
/product/** 想路由到 product-provider 服务上,此时在 yml 文件中顺序配置即可。

十三、配置网关超时

如果是通过 url 进行配置的,那么需要设置下面这个超时时间
十四、重写 Location 头
如果Zuul面向Web应用程序,那么当Web应用程序通过http状态代码3XX重定向时,可能需要重写Location头,否则浏览器将最终重定向到Web应用程序的url而不是Zuul url。
十五、文件上传处理
在微服务中,有时候我们经常需要用到文件的上传,当使用了服务网关 zuul 后,对于小的文件是可以上传成功的,那么对于大的文件就会报错,此处应该如何处理呢?
对于大文件的上传,我们需要绕过 Spring 的 DispatcherServlet。在 spring cloud zuul 中我们只需要在路由的前面加上 /zuul( zuul.servletPath) 前缀即可。
从上图中可以看到,对于大文件的上传,是加上了 /zuul 的前缀的。
完整代码
服务网关配置代码: https://gitee.com/huan1993/spring-cloud-parent/tree/master/zuul
zuul的各种配置的更多相关文章
- Spring Cloud(Dalston.SR5)--Zuul 网关-路由配置
Spring Cloud 在 Zuul 的 routing 阶段实现了几个过滤器,这些过滤器决定如何进行路由工作. 简单路由(SimpleHostRoutingFilter) 该过滤器运行后,会将 H ...
- springcloud Zuul中路由配置细节
上篇文章我们介绍了API网关的基本构建方式以及请求过滤,小伙伴们对Zuul的作用应该已经有了一个基本的认识,但是对于路由的配置我们只是做了一个简单的介绍,本文我们就来看看路由配置的其他一些细节. 首先 ...
- Zuul使用Ribbon配置自动重试
spring cloud的版本不断演进,导致很多配置的配置方式不断改变,有时某个配置在一个版本里面默认是true,后边一升级默认成了false,这点让人有点不爽. 言归正传 0.所使用版本 sprin ...
- Spring Cloud Zuul 2(基于配置中心的动态API网关)
在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...
- Zuul【基础配置】
概述:zuul底层是基于servlet,是由一系列的filter链构成. 1.路由配置 a.单例serverId映射 zuul: routes: client-a: path: /client/** ...
- zuul网管配置其他服务时 HTTP Status 500 – Internal Server Error
1.这个错误是由三个原因导致的 (1).我在给类的接口命名的时候前面少加了一个/ (2)给zuul配置路由的时候多加了个服务名,serviceId名称就是spring的name,而不是eureka注入 ...
- springcloud<zuul过滤器简单配置与跨域设置>
package com.wangbiao.config; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Req ...
- zuul重连配置
#retry #该参数用来开启重试机制 spring.cloud.loadbalancer.retry.enabled=true #断路器的超时时间,断路器的超时时间需要大于ribbon的超时时间,不 ...
- spring cloud 配置zuul实用
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡 ...
随机推荐
- JS011. 身份证号码校验(仅34行)
身份证格式 六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位数字校验码 checkIdCard.js checkIdCard: function (idCard){ //15位和1 ...
- 掌握基于AOP事务管理
一.手动管理和半自动工厂模式 二.AOP事务管理 1.表达式中,第一个※是返回值所有类型,service包下一个点意思是service包下的类,两个点意思是service包下的类和其子包下的类也包含, ...
- 以人为本打造“超职季”IP,58同城精准匹配企业招聘与打工人
撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 在大手笔培育IP的背后,58同城是如何考量的? 在餐厅当服务员的李阿姨今年54岁了.她的女儿马上研究生毕业,非常喜欢陈伟霆,手机屏保都是他.李阿姨没想到, ...
- Spring Boot 入门系列(二十七)使用Spring Data JPA 自定义查询如此简单,完全不需要写SQL!
前面讲了Spring Boot 整合Spring Boot JPA,实现JPA 的增.删.改.查的功能.JPA使用非常简单,只需继承JpaRepository ,无需任何数据访问层和sql语句即可实现 ...
- Redis核心原理与实践--列表实现原理之quicklist结构
在上一篇文章<Redis列表实现原理之ziplist结构>,我们分析了ziplist结构如何使用一块完整的内存存储列表数据. 同时也提出了一个问题:如果链表很长,ziplist中每次插入或 ...
- composer出现问题: Could not open input file: composer.phar
可以执行下面命令 php -r "readfile('https://getcomposer.org/installer');" | php This will install c ...
- navicat导出DDL语句
工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据. 方法一:需要拷贝的创建语句条数不多,可以选择直接拷贝DDL语句 方法二:使用Navicat的备份功能
- 关于ModuleNotFoundError: No module named 'xxx' 模块导入失败问题
我在执行数据库迁移命令的时候pycharm报错,提示ModuleNotFoundError: No module named 'ckeditor',但是我确实是导进来了,而且这个包也从settings ...
- 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 百篇博客分析OpenHarmony源码 | v24.01
百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内 ...
- Java面向对象编程(二)
关键字 -- this 一.this关键字的使用: 1.this可以用来修饰.调用:属性.方法.构造器. 2.this修饰属性和方法: this理解为:当前对象 或 当前正在创建的对象. 2.1 在类 ...