news 2026/4/18 3:36:24

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/18 3:30:57

运算放大器电路稳定性分析的Multisim仿真法

用Multisim破解运放稳定性难题&#xff1a;从振荡根源到补偿实战 你有没有遇到过这样的情况&#xff1f;电路原理图看起来毫无破绽&#xff0c;仿真也跑通了&#xff0c;结果一上电&#xff0c;输出却“自己动了起来”——不是轻微的毛刺&#xff0c;而是持续不断的高频振荡。更…

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

关键词自动提取:快速把握文档主旨

关键词自动提取&#xff1a;快速把握文档主旨 在每天被成百上千份报告、邮件和会议纪要淹没的工作场景中&#xff0c;如何迅速抓住一份文档的“灵魂”&#xff1f;不是靠通读全文&#xff0c;也不是依赖模糊的印象&#xff0c;而是让AI替你一眼看穿重点。这正是现代智能文档系统…

作者头像 李华
网站建设 2026/4/11 0:56:24

IDA Pro下载路径推荐:避免踩坑的新手指南

走对第一步&#xff1a;IDA Pro 下载的正确姿势与逆向工程入门避坑指南 你是不是也曾在搜索引擎里输入“idapro下载”&#xff0c;然后被一堆标着“永久激活”“绿色免安装”的链接搞得眼花缭乱&#xff1f;点进去后&#xff0c;要么是跳转到不明网站&#xff0c;要么弹出各种…

作者头像 李华
网站建设 2026/4/17 7:44:10

Altium Designer下高效PCB布局布线思路实战案例

Altium Designer实战精要&#xff1a;从零构建高性能嵌入式PCB的底层逻辑你有没有遇到过这样的情况&#xff1f;明明原理图没问题&#xff0c;所有器件都连上了&#xff0c;可板子一上电&#xff0c;系统就跑飞&#xff1b;USB时断时续&#xff0c;ADC采样像在“抽奖”&#xf…

作者头像 李华
网站建设 2026/4/17 6:53:53

优惠券发放系统:营销活动常用手段

优惠券发放系统&#xff1a;营销活动常用手段 在今天的数字化运营中&#xff0c;一场看似简单的促销活动背后&#xff0c;往往隐藏着复杂的规则网络——谁可以领券&#xff1f;能领多少&#xff1f;是否与其他优惠叠加&#xff1f;稍有疏忽&#xff0c;就可能导致财务损失或合规…

作者头像 李华