news 2026/4/16 18:24:28

spring-gateway配置详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring-gateway配置详解

一、核心配置结构总览

spring:cloud:gateway:# 1. 全局配置default-filters:[]globalcors:{}httpclient:{}metrics:{}# 2. 路由配置routes:-id:uri:predicates:[]filters:[]metadata:{}order:0# 3. 发现服务配置discovery:locator:enabled:false# 4. 路由定义存储route:locator:cache:enabled:true

二、全局配置详解

  1. 全局过滤器

    spring:cloud:gateway:default-filters:-AddRequestHeader=X-Request-Global,Global-Value-AddResponseHeader=X-Response-Global,Global-Value-DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin-name:RequestRateLimiterargs:redis-rate-limiter.replenishRate:10redis-rate-limiter.burstCapacity:20key-resolver:"#{@ipKeyResolver}"
  2. 全局CORS配置

    spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowed-origins:"https://example.com"allowed-methods:-GET-POST-PUT-DELETE-OPTIONSallowed-headers:-Content-Type-Authorizationexposed-headers:-X-Custom-Headerallow-credentials:truemax-age:3600
  3. HTTP客户端配置

    spring:cloud:gateway:httpclient:# 连接池配置pool:type:ELASTIC# 连接池类型: ELASTIC, FIXEDmax-connections:1000# 最大连接数acquire-timeout:45000# 获取连接超时(ms)# SSL配置ssl:use-insecure-trust-manager:falsetrusted-x509-certificates:[]handshake-timeout:10000close-notify-flush-timeout:3000close-notify-read-timeout:0# 代理配置proxy:host:proxy.example.comport:8080username:userpassword:pass# 响应压缩compression:true
  4. WebFlux配置

    spring:cloud:gateway:# WebFlux配置httpclient:# 响应式客户端配置response-timeout:60sconnect-timeout:30smax-header-size:65536max-chunk-size:65536max-initial-line-length:4096# WebSocket支持websocket:max-frame-payload-length:65536
  5. uri配置详解

    uri:lb://user-service# 负载均衡到服务uri:http://localhost:8080# 直接URLuri:https://example.com# HTTPS地址uri:ws://service:8080# WebSocket

三、路由配置详解

  1. 完整路由定义

    spring:cloud:gateway:routes:-id:user-service-v1uri:lb://user-servicepredicates:# 多重条件-Path=/api/v1/users/**-Method=GET,POST-Header=X-API-Version,v1-Query=type,internal-Cookie=session,.*-After=2024-01-01T00:00:00+08:00-Weight=user-group,80filters:# 请求预处理-StripPrefix=2-PrefixPath=/internal-SetPath=/api/users/{segment}-RewritePath=/old/(?<path>.*),/new/$\{path}# 参数处理-AddRequestParameter=key,value-AddRequestHeader=X-Request-Id,12345-RemoveRequestHeader=Cookie# 响应处理-AddResponseHeader=X-Response-Time,${took}-DedupeResponseHeader=Set-Cookie# 熔断降级-name:CircuitBreakerargs:name:userServiceCBfallbackUri:forward:/fallback/userstatusCodes:-500-502-503# 重试机制-name:Retryargs:retries:3statuses:SERVICE_UNAVAILABLEmethods:GETbackoff:firstBackoff:10msmaxBackoff:50msfactor:2basedOnPreviousValue:false# 请求大小限制-name:RequestSizeargs:maxSize:5MB# 修改响应体-name:ModifyResponseBodyargs:in-class:Stringout-class:Stringrewrite-function:"#{@modifyResponseBody}"metadata:# 自定义元数据version:"1.0"timeout:5000connect-timeout:3000response-timeout:10000max-auto-retries-next-server:2max-auto-retries:1order:1
  2. 断言工厂详细配置

    Path断言:

    predicates:-Path=/api/users/{id}/**,/api/orders/{segment}

    Header断言:

    predicates:-name:Headerargs:header:X-Request-Idregexp:'\d+'

    自定义断言:

    predicates:-name:Customargs:name:myCustomPredicatearg1:value1arg2:value2
  3. 过滤器工厂详细配置

    熔断器配置:

    filters:-name:CircuitBreakerargs:name:myCircuitBreakerfallbackUri:forward:/fallbackstatusCodes:-500-"BAD_GATEWAY"-"5xx"args:failureRateThreshold:50slowCallDurationThreshold:"2s"permittedNumberOfCallsInHalfOpenState:10slidingWindowSize:100minimumNumberOfCalls:10waitDurationInOpenState:"60s"

    限流配置:

    filters:-name:RequestRateLimiterargs:key-resolver:"#{@userKeyResolver}"rate-limiter:"#{@redisRateLimiter}"deny-empty-key:trueempty-key-status:403# Redis限流器配置@Bean public RedisRateLimiter redisRateLimiter(){return new RedisRateLimiter(10,20,1);}

四、发现服务配置

  1. 服务发现自动路由

    spring:cloud:gateway:discovery:locator:enabled:truelower-case-service-id:truepredicates:-name:Pathargs:pattern:"'/service/'+serviceId.toLowerCase()+'/**'"filters:-name:RewritePathargs:regexp:"'/service/' + serviceId.toLowerCase() + '/(?<remaining>.*)'"replacement:"'/${remaining}'"
  2. 服务发现元数据路由

    spring:cloud:gateway:discovery:locator:enabled:trueinclude-expression:metadata['version']=='v1'url-expression:"'http://'+serviceId.toLowerCase()+'.example.com'"

五、监控和指标配置

  1. Micrometer指标

    management:endpoints:web:exposure:include:health,info,gateway,metrics,prometheusmetrics:tags:application:${spring.application.name}spring:cloud:gateway:metrics:enabled:true# 自定义标签tags:path:"${routeId}"method:"${request.method}"status:"${response.status}"
  2. 跟踪配置

    spring:sleuth:gateway:enabled:trueweb:client:enabled:truezipkin:base-url:http://localhost:9411

六、安全配置

  1. SSL/TLS配置

    server:ssl:enabled:truekey-store:classpath:keystore.p12key-store-password:changeitkey-store-type:PKCS12key-alias:gatewaykey-password:changeitspring:cloud:gateway:httpclient:ssl:use-insecure-trust-manager:falsehandshake-timeout:10000
  2. 安全头配置

    spring:cloud:gateway:default-filters:-name:SecureHeadersargs:xss-protection-header:1; mode=blockstrict-transport-security:max-age=31536000 ; includeSubDomainsx-frame-options:DENYcontent-type-options:nosniffreferrer-policy:no-referrercontent-security-policy:default-src 'self'

七、缓存和性能优化

  1. 路由缓存配置

    spring:cloud:gateway:route:locator:cache:enabled:trueinitial-capacity:100maximum-size:1000ttl:60s
  2. 连接池优化

    spring:cloud:gateway:httpclient:pool:type:FIXEDmax-connections:500max-idle-time:30smax-life-time:60spending-acquire-timeout:60spending-acquire-max-count:1000eviction-interval:10s

八、完整配置示例

生产环境配置示例

spring:application:name:api-gatewaycloud:gateway:# 全局配置default-filters:-AddRequestHeader=X-Gateway-Request-ID,${random.uuid}-AddResponseHeader=X-Gateway-Response-Time,${took}-DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin# 全局CORSglobalcors:cors-configurations:'[/**]':allowed-origins:"*"allowed-methods:"*"allowed-headers:"*"max-age:3600# HTTP客户端配置httpclient:pool:type:ELASTICmax-connections:1000acquire-timeout:45000connect-timeout:5000response-timeout:30000compression:true# 路由配置routes:-id:auth-serviceuri:lb://auth-servicepredicates:-Path=/auth/**-Method=POSTfilters:-StripPrefix=1-name:RequestRateLimiterargs:key-resolver:"#{@ipKeyResolver}"redis-rate-limiter.replenishRate:5redis-rate-limiter.burstCapacity:10-CircuitBreaker=authService-id:user-serviceuri:lb://user-servicepredicates:-Path=/api/users/**-Header=X-API-Token,.+filters:-StripPrefix=2-AddRequestHeader=X-Service-Version,v2-Retry=3-id:product-serviceuri:lb://product-servicepredicates:-Path=/api/products/**-Query=categoryfilters:-StripPrefix=2-SetStatus=401,POST# 服务发现discovery:locator:enabled:truelower-case-service-id:true# 指标metrics:enabled:true# 监控端点management:endpoints:web:exposure:include:health,info,gateway,metricsmetrics:export:prometheus:enabled:trueendpoint:health:show-details:always

九、自定义配置扩展

  1. 自定义过滤器

    @ComponentpublicclassCustomGlobalFilterimplementsGlobalFilter,Ordered{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){// 前置处理ServerHttpRequestrequest=exchange.getRequest().mutate().header("X-Custom-Header","custom-value").build();returnchain.filter(exchange.mutate().request(request).build()).then(Mono.fromRunnable(()->{// 后置处理LongstartTime=exchange.getAttribute("startTime");if(startTime!=null){LongendTime=System.currentTimeMillis();System.out.println("请求耗时: "+(endTime-startTime)+"ms");}}));}@OverridepublicintgetOrder(){return-1;}}
  2. 自定义断言工厂

    @ComponentpublicclassCustomRoutePredicateFactoryextendsAbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config>{publicCustomRoutePredicateFactory(){super(Config.class);}@OverridepublicPredicate<ServerWebExchange>apply(Configconfig){returnexchange->{// 自定义断言逻辑returnconfig.getValue().equals(exchange.getRequest().getHeaders().getFirst("X-Custom"));};}publicstaticclassConfig{privateStringvalue;// getters and setters}}

十、配置优化建议

  • 性能调优:

    • 根据负载调整连接池大小
    • 启用响应压缩
    • 合理设置超时时间
  • 高可用:

    • 配置多个相同服务实例
    • 设置合理的熔断和重试策略
    • 启用健康检查
  • 安全性:

    • 启用HTTPS
    • 配置安全响应头
    • 实施API限流
  • 可观测性:

    • 启用指标收集
    • 集成分布式跟踪
    • 配置详细日志
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:17:35

vivado2018.3安装步骤图解说明:直观展示每一步操作

vivado2018.3安装全攻略&#xff1a;从零开始&#xff0c;一次搞定开发环境部署 你是不是也经历过这样的场景&#xff1f; 刚下定决心学习FPGA&#xff0c;兴致勃勃地打开Xilinx官网准备安装Vivado&#xff0c;结果还没进主界面就卡在了第一步——安装器打不开&#xff1b;或…

作者头像 李华
网站建设 2026/4/16 12:27:33

24、XML数据处理:从复杂结构到高效应用

XML数据处理:从复杂结构到高效应用 1. 复杂结构的XML表示 XML具备在单个文件中表示层次结构的能力,相较于在FoxPro中使用单个表进行JOIN操作,它能更节省空间,且在方法学上更为优雅。 假设存在两个文件: - INVOICES.DBF : | 字段名 | 类型 | | — | — | | InvNu…

作者头像 李华
网站建设 2026/4/16 12:35:18

35、报表生成与管理全攻略

报表生成与管理全攻略 1. 互联网报表发布方式 在互联网上发布报表有多种方式,下面为大家详细介绍几种常见的方法及其特点。 - 使用 SET TEXTMERGE TO :这是一种简单的构建互联网报表页面的方式,相较于 REPORT FORM 和 SAVE AS HTML,它能让你对报表格式有更多的控制。不…

作者头像 李华
网站建设 2026/4/16 14:01:06

短视频矩阵号安全运营指南:浏览器指纹隔离与检测工具应用

今天跟大家聊一个干货话题&#xff1a;抖音矩阵账号的浏览器指纹隔离设置。很多朋友做多账号运营&#xff0c;尤其是抖音矩阵号运营&#xff0c;总是被一个问题困扰——同一台设备登录多个账号容易被平台识别&#xff0c;导致封号、降权。其实&#xff0c;这背后的关键就是浏览…

作者头像 李华
网站建设 2026/4/16 11:59:42

Multisim14.0安装教程:一文说清环境搭建全过程

Multisim14.0安装全攻略&#xff1a;从零搭建电路仿真环境你是不是也曾在电子技术课上&#xff0c;看着老师在电脑里轻轻一点&#xff0c;就能让一个放大电路的波形跃然屏上&#xff1f;或者正为毕业设计中的滤波器参数焦头烂额&#xff0c;却苦于没有实验板反复验证&#xff1…

作者头像 李华
网站建设 2026/4/16 14:00:54

基于SDR的FM接收机设计(GNU Radio实战)

用一块20美元的USB狗&#xff0c;听懂整个FM波段&#xff1a;GNU Radio实战手记你有没有想过&#xff0c;只需一个比一杯奶茶还便宜的小设备&#xff0c;就能把空气中飘荡的FM广播信号变成耳边清晰的声音&#xff1f;这不是科幻&#xff0c;而是今天每个无线电爱好者都能轻松实…

作者头像 李华