做网站需要网站负责人,wordpress新虎嗅,管理者应具备的能力,什邡市建设局网站作用
统一管理#xff0c;易于监控安全#xff0c;限流#xff1a;在网关层就过滤掉非法信息nginx外部网关#xff0c;gateway内网nginx可以使用Lua或Kong来增强
概念
id:名称随意uri: 被代理的服务地址。id和uri必填#xff0c;谓词和过滤器非必填谓词#xff1a;可以…作用
统一管理易于监控安全限流在网关层就过滤掉非法信息nginx外部网关gateway内网nginx可以使用Lua或Kong来增强
概念
id:名称随意uri: 被代理的服务地址。id和uri必填谓词和过滤器非必填谓词可以用于匹配访问gateway的uri匹配则当前路由生效过滤器GatewayFilter的实例在代理之前或之后添加逻辑灵活度最高
处理流程
首先Handler Mapping对URL进行处理再交给Web Handler它调用被过滤器前半部分进行处理处理完成后调用真实被代理的服务被代理的服务响应后执行过滤器后半部分的逻辑把结果返回给WebHandler再返回给HandlerMapping最终返回给客户端
使用
gateway:discovery:locator:enabled: true # 启用自动根据服务ID生成路由lower-case-service-id: true # 设置路由的路径为小写的服务IDyml配置
list中的元素如果有多个字段需要-和冒号分别指定每个字段和值如果只有一个字段可以使用逗号分割对象类型的配置可以通过-和冒号配置每个字段Map类型key,value通过冒号分割
predicates:- Path/sendOrder- Queryname,ma.- name: Queryargs:param: idregexp: \d#predicates是List, 它的元素是public class PredicateDefinition {NotNullprivate String name;private MapString, String args new LinkedHashMap();}等号分割转成对象的写法不是yml内置支持的谓词
谓词配置是一个List其中的元素可以是特定格式的字符串或者对象。字符串写法等号分割第1部分是谓词名称name第二部分args逗号分割值保存进Map valueMap key自动生成。对象写法PredicateDefinition如果args中本身有逗号和冒号就不能使用字符串格式shortcutType方法定义了args参数到ConfigClass的解析方式DEFAULTshortcutFieldOrder去掉shortcutFieldPrefix前缀对应ConfigClass字段名称args参数的val对应ConfigClass的字段值GATHER_LIST逗号分割的ListGATHER_LIST_TAIL_FLAG逗号分割的List但最后一个值是布尔值最终转成2个key的Map第一个key的值是布尔值前面的List第二个是布尔值用于匹配访问gateway的请求(比如uri,查询参数、请求头)匹配则当前路由生效对应GatewayPredicate的实现实现类由工厂创建工厂是RoutePredicateFactory的实现类实现类命名规范谓词nameRoutePredicateFactory比如Path对应PathRoutePredicateFactory谓词名称对应工厂实现类的类名前缀谓词参数args对应工厂ConfigClass多个谓词是且的关系谓词不通过时gateway返回404
Path
匹配路径支持ant匹配和通过{}提取uriVariables
Query
是否有对应http请求参数名称值可以正则。name固定Queryargs有2个值param和regexp对应查询参数名称和值只配名称时表示只要有该请求参数则通过
Header
HeaderRoutePredicateFactory匹配请求头的名称和值可以只配名称实际请求头的值可能有多个只要有一个匹配即可配置值支持正则
Method
匹配HTTP请求方法配置必须大写逗号分割
RemoteAddr
匹配请求的客户端ip准确的说是最后一个网络代理的ip可以多个逗号分割
Host
匹配Host请求头中主机部分的值不包括端口可以多个逗号分割可以ant匹配采用AntPathMatcher匹配且路径分割符是.
Cookie
匹配Cookie的名称和值值可以正则匹配
Weight
用于不同路由的负载均衡同一分组的路由根据权重进行负载可以配置2个值逗号分割分别是分组和权重WeightCalculatorWebFilter启动时根据Weight配置生成一个双层的Map第一层是分组名称第二层是路由id请求到来时生成一个0~1随机数每个分组的选择一个路由IDWeightRoutePredicateFactory谓词过滤时根据分组和路由ID进行过滤
过滤器
配置写法和谓词相同字符串写法等号分割第一部分对应过滤器工厂GatewayFilterFactory类名前缀第二部分是参数过滤器用于修改请求和响应
AddRequestHeader
添加请求头后端可以获取到请求头的值支持从uriVariables中动态获取
StripPrefix
只有一个整数值n将请求的路径按/分割后去除前缀n个
限流
跨域
spring.cloud.gateway.globalcors:cors-configurations:[/**]: #跨域的uriPatternallowedHeaders: *allowedOrigins: *allowedMethods:- POST- OPTIONS- GET服务端通过请求头Origin和请求url的scheme、host、port是否相同来判断是否为跨域请求只要有一个不同则为跨域请求必须有跨域配置并且请求的uri和跨域配置的uriPattern匹配网关才会判断是否跨域如果跨域通过跨域配置中允许跨域的请求头、来源、请求方法和实际请求的请求头、来源、请求方法是否匹配如果都匹配则运行跨域访问否则返回403Forbidenorg.springframework.web.reactive.handler.AbstractHandlerMapping#getHandlerorg.springframework.web.cors.reactive.DefaultCorsProcessor#process
自动生成路由
支持通过服务发现获取服务ID自动根据服务ID生成路由配置。默认的路由配置的uri是lb://serviceId谓词是/serviceId/**过滤器是Rewritepath将serviceId去掉
全局过滤器
ReactiveLoadBalancerClientFilter
处理带lb scheme的路由URI先通过ServiceInstanceListSupplier根据服务名称获取服务实例再通过ReactorLoadBalancer实例负载均衡
RouteToRequestUrlFilter
做2件事情1、支持2层scheme将外层scheme保存到GATEWAY_SCHEME_PREFIX_ATTR然后去除。2、使用内层sheme、host、port替换实际请求的uri从而实现转发