前言
在之前介绍了一些Spring Cloud Gateway配置项,接下来详细介绍下所有配置项。
application.yml 配置项
可以在application.properties、application.yml、代码、命令行开关中指定各种属性。
本附录提供了常见 Spring Cloud Gateway 属性的列表以及对使用它们的底层类的引用。
名称 | 默认 | 说明 |
---|---|---|
spring.cloud.gateway.default-filters | 作用于每个路由的过滤器列表 | |
spring.cloud.gateway.discovery.locator.enabled | false | 启用服务发现,动态路由 |
spring.cloud.gateway.discovery.locator.filters | ||
spring.cloud.gateway.discovery.locator.include-expression | true | 是否在网关集成中包含服务的 SpEL 表达式,默认为:true。 |
spring.cloud.gateway.discovery.locator.lower-case-service-id | false | 在谓词和过滤器中小写 serviceId ,默认为 false。当 eureka 自动大写 serviceId 时很有用。所以 MYSERIVCE,会匹配 /myservice/** |
spring.cloud.gateway.discovery.locator.predicates | ||
spring.cloud.gateway.discovery.locator.route-id-prefix | routeId 的前缀,默认为 discoveryClient.getClass().getSimpleName() + “_”+服务 ID 。将以创建 routeId。 | |
spring.cloud.gateway.discovery.locator.url-expression | ‘lb://’+serviceId | 为每个路由创建 uri 的 SpEL 表达式,默认为:‘lb://’+serviceId。 |
spring.cloud.gateway.enabled | true | 启用网关功能。 |
spring.cloud.gateway.fail-on-route-definition-error | true | 路由定义错误失败的选项,默认为 true。否则,将记录警告。 |
spring.cloud.gateway.filter.add-request-header.enabled | true | 启用 add-request-header 过滤器。 |
spring.cloud.gateway.filter.add-request-parameter.enabled | true | 启用添加请求参数过滤器。 |
spring.cloud.gateway.filter.add-response-header.enabled | true | 启用添加响应头过滤器。 |
spring.cloud.gateway.filter.circuit-breaker.enabled | true | 启用断路器过滤器。 |
spring.cloud.gateway.filter.dedupe-response-header.enabled | true | 启用重复数据删除响应头过滤器。 |
spring.cloud.gateway.filter.fallback-headers.enabled | true | 启用回退标头过滤器。 |
spring.cloud.gateway.filter.hystrix.enabled | true | 启用 hystrix 过滤器。 |
spring.cloud.gateway.filter.map-request-header.enabled | true | 启用 map-request-header 过滤器。 |
spring.cloud.gateway.filter.modify-request-body.enabled | true | 启用修改请求正文过滤器。 |
spring.cloud.gateway.filter.modify-response-body.enabled | true | 启用修改响应正文过滤器。 |
spring.cloud.gateway.filter.prefix-path.enabled | true | 启用前缀路径过滤器。 |
spring.cloud.gateway.filter.preserve-host-header.enabled | true | 启用保留主机头过滤器。 |
spring.cloud.gateway.filter.redirect-to.enabled | true | 启用重定向过滤器。 |
spring.cloud.gateway.filter.remove-hop-by-hop.headers | ||
spring.cloud.gateway.filter.remove-hop-by-hop.order | ||
spring.cloud.gateway.filter.remove-request-header.enabled | true | 启用 remove-request-header 过滤器。 |
spring.cloud.gateway.filter.remove-request-parameter.enabled | true | 启用删除请求参数过滤器。 |
spring.cloud.gateway.filter.remove-response-header.enabled | true | 启用 remove-response-header 过滤器。 |
spring.cloud.gateway.filter.request-header-size.enabled | true | 启用请求头大小过滤器。 |
spring.cloud.gateway.filter.request-header-to-request-uri.enabled | true | 启用 request-header-to-request-uri 过滤器。 |
spring.cloud.gateway.filter.request-rate-limiter.deny-empty-key | true | 如果密钥解析器返回空密钥,则切换到拒绝请求,默认为 true。 |
spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code | 当 denyEmptyKey 为 true 时返回的 HttpStatus,默认为 FORBIDDEN。 | |
spring.cloud.gateway.filter.request-rate-limiter.enabled | true | 启用请求速率限制器过滤器。 |
spring.cloud.gateway.filter.request-size.enabled | true | 启用请求大小过滤器。 |
spring.cloud.gateway.filter.retry.enabled | true | 启用重试过滤器。 |
spring.cloud.gateway.filter.rewrite-location-response-header.enabled | true | 启用 rewrite-location-response-header 过滤器。 |
spring.cloud.gateway.filter.rewrite-location.enabled | true | 启用重写位置过滤器。 |
spring.cloud.gateway.filter.rewrite-path.enabled | true | 启用重写路径过滤器。 |
spring.cloud.gateway.filter.rewrite-response-header.enabled | true | 启用重写响应头过滤器。 |
spring.cloud.gateway.filter.save-session.enabled | true | 启用保存会话过滤器。 |
spring.cloud.gateway.filter.secure-headers.content-security-policy | default-src ‘self’ https:; font-src ‘self’ https: data:; img-src ‘self’ https: data:; object-src ‘none’; script-src https:; style-src ‘self’ https: ‘unsafe-inline’ | |
spring.cloud.gateway.filter.secure-headers.content-type-options | nosniff | |
spring.cloud.gateway.filter.secure-headers.disable | ||
spring.cloud.gateway.filter.secure-headers.download-options | noopen | |
spring.cloud.gateway.filter.secure-headers.enabled | true | 启用安全标头过滤器。 |
spring.cloud.gateway.filter.secure-headers.frame-options | DENY | |
spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies | none | |
spring.cloud.gateway.filter.secure-headers.referrer-policy | no-referrer | |
spring.cloud.gateway.filter.secure-headers.strict-transport-security | max-age=631138519 | |
spring.cloud.gateway.filter.secure-headers.xss-protection-header | 1 ; mode=block | |
spring.cloud.gateway.filter.set-path.enabled | true | 启用设置路径过滤器。 |
spring.cloud.gateway.filter.set-request-header.enabled | true | 启用 set-request-header 过滤器。 |
spring.cloud.gateway.filter.set-request-host-header.enabled | true | 启用 set-request-host-header 过滤器。 |
spring.cloud.gateway.filter.set-response-header.enabled | true | 启用 set-response-header 过滤器。 |
spring.cloud.gateway.filter.set-status.enabled | true | 启用设置状态过滤器。 |
spring.cloud.gateway.filter.strip-prefix.enabled | true | 启用带前缀过滤器。 |
spring.cloud.gateway.forwarded.enabled | true | 启用 ForwardedHeadersFilter。 |
spring.cloud.gateway.global-filter.adapt-cached-body.enabled | true | 启用adapt-cached-body 全局过滤器。 |
spring.cloud.gateway.global-filter.forward-path.enabled | true | 启用转发路径全局过滤器。 |
spring.cloud.gateway.global-filter.forward-routing.enabled | true | 启用转发路由全局过滤器。 |
spring.cloud.gateway.global-filter.load-balancer-client.enabled | true | 启用负载平衡器客户端全局过滤器。 |
spring.cloud.gateway.global-filter.netty-routing.enabled | true | 启用 netty-routing 全局过滤器。 |
spring.cloud.gateway.global-filter.netty-write-response.enabled | true | 启用 netty-write-response 全局过滤器。 |
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled | true | 启用reactive-load-balancer-client 全局过滤器。 |
spring.cloud.gateway.global-filter.remove-cached-body.enabled | true | 启用 remove-cached-body 全局过滤器。 |
spring.cloud.gateway.global-filter.route-to-request-url.enabled | true | 启用 route-to-request-url 全局过滤器。 |
spring.cloud.gateway.global-filter.websocket-routing.enabled | true | 启用 websocket-routing 全局过滤器。 |
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping | false | 如果应将全局 CORS 配置添加到 URL 处理程序。 |
spring.cloud.gateway.globalcors.cors-configurations | ||
spring.cloud.gateway.httpclient.compression | false | 为 Netty HttpClient 启用压缩。 |
spring.cloud.gateway.httpclient.connect-timeout | 以毫秒为单位的连接超时,默认为 45 秒。 | |
spring.cloud.gateway.httpclient.max-header-size | 最大响应标头大小。 | |
spring.cloud.gateway.httpclient.max-initial-line-length | 最大初始行长度。 | |
spring.cloud.gateway.httpclient.pool.acquire-timeout | 仅针对 FIXED 类型,等待获取的最长时间(以毫秒为单位)。 | |
spring.cloud.gateway.httpclient.pool.eviction-interval | 0 | 以指定的时间间隔在后台执行定期驱逐检查。默认禁用 ({@link Duration#ZERO}) |
spring.cloud.gateway.httpclient.pool.max-connections | 仅适用于 FIXED 类型,即在现有连接上开始挂起获取之前的最大连接数。 | |
spring.cloud.gateway.httpclient.pool.max-idle-time | 通道关闭之前的时间(以毫秒为单位)。如果为 NULL,则没有最大空闲时间。 | |
spring.cloud.gateway.httpclient.pool.max-life-time | 通道将关闭的持续时间。如果为 NULL,则没有最大生命周期。 | |
spring.cloud.gateway.httpclient.pool.metrics | false | 允许在 Micrometer 中收集和注册通道池指标。默认禁用。 |
spring.cloud.gateway.httpclient.pool.name | proxy | 通道池映射名称 |
spring.cloud.gateway.httpclient.pool.type | HttpClient 使用的池类型,默认为 ELASTIC。 | |
spring.cloud.gateway.httpclient.proxy.host | Netty HttpClient 代理配置的主机名。 | |
spring.cloud.gateway.httpclient.proxy.non-proxy-hosts-pattern | 用于配置的主机列表的正则表达式 (Java)。应该直接到达,绕过代理 | |
spring.cloud.gateway.httpclient.proxy.password | Netty HttpClient 代理配置密码。 | |
spring.cloud.gateway.httpclient.proxy.port | Netty HttpClient 的代理配置端口。 | |
spring.cloud.gateway.httpclient.proxy.type | proxyType 用于 Netty HttpClient 的代理配置。 | |
spring.cloud.gateway.httpclient.proxy.username | Netty HttpClient 代理配置的用户名。 | |
spring.cloud.gateway.httpclient.response-timeout | 响应超时。 | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout | 3000ms | SSL close_notify 刷新超时。默认为 3000 毫秒。 |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout | 0 | SSL close_notify 读取超时。默认为 0 毫秒。 |
spring.cloud.gateway.httpclient.ssl.default-configuration-type | 默认的 ssl 配置类型。默认为 TCP。 | |
spring.cloud.gateway.httpclient.ssl.handshake-timeout | 10000ms | SSL 握手超时。默认为 10000 毫秒 |
spring.cloud.gateway.httpclient.ssl.key-password | 密钥密码,默认与keyStorePassword 相同。 | |
spring.cloud.gateway.httpclient.ssl.key-store | Netty HttpClient 的密钥库路径。 | |
spring.cloud.gateway.httpclient.ssl.key-store-password | 密钥库密码。 | |
spring.cloud.gateway.httpclient.ssl.key-store-provider | Netty HttpClient 的密钥库提供程序,可选字段。 | |
spring.cloud.gateway.httpclient.ssl.key-store-type | JKS | Netty HttpClient 的密钥库类型,默认为 JKS。 |
spring.cloud.gateway.httpclient.ssl.trusted-x509-certificates | 用于验证远程端点证书的可信证书。 | |
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager | false | 安装 netty InsecureTrustManagerFactory。这是不安全的,不适合生产。 |
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length | 最大帧有效载荷长度。 | |
spring.cloud.gateway.httpclient.websocket.proxy-ping | true | 代理 ping 帧到下游服务,默认为 true。 |
spring.cloud.gateway.httpclient.wiretap | false | 为 Netty HttpClient 启用窃听调试。 |
spring.cloud.gateway.httpserver.wiretap | false | 为 Netty HttpServer 启用窃听调试。 |
spring.cloud.gateway.loadbalancer.use404 | false | |
spring.cloud.gateway.metrics.enabled | false | 启用指标数据的收集。 |
spring.cloud.gateway.metrics.prefix | spring.cloud.gateway | 网关发出的所有指标的前缀。 |
spring.cloud.gateway.metrics.tags | 添加到指标的标签映射。 | |
spring.cloud.gateway.predicate.after.enabled | true | 启用 after 谓词。 |
spring.cloud.gateway.predicate.before.enabled | true | 启用 before 谓词。 |
spring.cloud.gateway.predicate.between.enabled | true | 启用 between 谓词。 |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled | true | 启用 cloud-foundry-route-service 谓词。 |
spring.cloud.gateway.predicate.cookie.enabled | true | 启用 cookie 谓词。 |
spring.cloud.gateway.predicate.header.enabled | true | 启用标头谓词。 |
spring.cloud.gateway.predicate.host.enabled | true | 启用主机谓词。 |
spring.cloud.gateway.predicate.method.enabled | true | 启用方法谓词。 |
spring.cloud.gateway.predicate.path.enabled | true | 启用路径谓词。 |
spring.cloud.gateway.predicate.query.enabled | true | 启用查询谓词。 |
spring.cloud.gateway.predicate.read-body.enabled | true | 启用 read-body 谓词。 |
spring.cloud.gateway.predicate.remote-addr.enabled | true | 启用远程地址谓词。 |
spring.cloud.gateway.predicate.weight.enabled | true | 启用权重谓词。 |
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header | X-RateLimit-Burst-Capacity | 返回突发容量配置的标头名称。 |
spring.cloud.gateway.redis-rate-limiter.config | ||
spring.cloud.gateway.redis-rate-limiter.include-headers | true | 是否包含包含速率限制器信息的标头,默认为 true。 |
spring.cloud.gateway.redis-rate-limiter.remaining-header | X-RateLimit-Remaining | 返回当前秒内剩余请求数的标头名称。 |
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header | X-RateLimit-Replenish-Rate | 返回补货率配置的标题名称。 |
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header | X-RateLimit-Requested-Tokens | 返回请求的令牌配置的标头的名称。 |
spring.cloud.gateway.routes | route 路由集合。 | |
spring.cloud.gateway.set-status.original-status-header-name | 包含代理请求的 http 代码的标头名称。 | |
spring.cloud.gateway.streaming-media-types | ||
spring.cloud.gateway.x-forwarded.enabled | true | 启用 XForwardedHeadersFilter。 |
spring.cloud.gateway.x-forwarded.for-append | true | 如果已启用将 X-Forwarded-For 作为列表附加。 |
spring.cloud.gateway.x-forwarded.for-enabled | true | 如果启用 X-Forwarded-For。 |
spring.cloud.gateway.x-forwarded.host-append | true | 如果启用将 X-Forwarded-Host 作为列表附加。 |
spring.cloud.gateway.x-forwarded.host-enabled | true | X-Forwarded-Host 启用。 |
spring.cloud.gateway.x-forwarded.order | 0 | XForwardedHeadersFilter 的顺序。 |
spring.cloud.gateway.x-forwarded.port-append | true | 如果启用将 X-Forwarded-Port 作为列表附加。 |
spring.cloud.gateway.x-forwarded.port-enabled | true | 如果启用 X-Forwarded-Port。 |
spring.cloud.gateway.x-forwarded.prefix-append | true | 如果将 X-Forwarded-Prefix 作为列表附加已启用。 |
spring.cloud.gateway.x-forwarded.prefix-enabled | true | |
spring.cloud.gateway.x-forwarded.proto-append | true | 如果启用将 X-Forwarded-Proto 作为列表附加。 |
spring.cloud.gateway.x-forwarded.proto-enabled | true | 如果启用 X-Forwarded-Proto。 |
其他配置
Http超时配置
可以为所有路由配置 Http 超时(响应和连接),并可以为每个路由特定配置。
1. 全局超时
配置全局 http 超时:
- connect-timeout必须以毫秒为单位指定。
- response-timeout必须指定为 java.time.Duration
示例:
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5s
2. 每个路由超时
要配置每条路由超时:
- connect-timeout必须以毫秒为单位指定。
- response-timeout必须以毫秒为单位指定。
- id: per_route_timeouts
uri: https://example.org
predicates:
- name: Path
args:
pattern: /delay/{
timeout}
metadata:
response-timeout: 200
connect-timeout: 200
3. 使用 Java 代码为每条路由超时配置
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){
return routeBuilder.routes()
.route("test1", r -> {
return r.host("*.somehost.org").and().path("/somepath")
.filters(f -> f.addRequestHeader("header1", "header-value-1"))
.uri("http://someuri")
.metadata(RESPONSE_TIMEOUT_ATTR, 200)
.metadata(CONNECT_TIMEOUT_ATTR, 200);
})
.build();
}
使用 Java API配置路由
为了允许在 Java 中进行简单配置,该RouteLocatorBuilderbean 包括一个流畅的 API。以下清单显示了它的工作原理:
// static imports from GatewayFilters and RoutePredicates
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder, ThrottleGatewayFilterFactory throttle) {
return builder.routes()
.route(r -> r.host("**.abc.org").and().path("/image/png")
.filters(f ->
f.addResponseHeader("X-TestHeader", "foobar"))
.uri("http://httpbin.org:80")
)
.route(r -> r.path("/image/webp")
.filters(f ->
f.addResponseHeader("X-AnotherHeader", "baz"))
.uri("http://httpbin.org:80")
.metadata("key", "value")
)
.route(r -> r.order(-1)
.host("**.throttle.org").and().path("/get")
.filters(f -> f.filter(throttle.apply(1,
1,
10,
TimeUnit.SECONDS)))
.uri("http://httpbin.org:80")
.metadata("key", "value")
)
.build();
}
这种风格还允许更多的自定义谓词断言。Route Definition Locator bean定义的谓词使用逻辑组合and。通过使用流利的Java API,你可以使用and(),or()以及negate()的Predicate类。
Discovery Client路由 配置谓词和过滤器
默认情况下,网关使用DiscoveryClient.
默认谓词是使用模式定义的路径谓词/serviceId/**,其中serviceId是DiscoveryClient.
默认过滤器是带有正则表达式/serviceId/?(?< remaining>.*)和替换的重写路径过滤器/${ remaining}。这会在向下游发送请求之前从路径中剥离服务 ID。
如果要自定义DiscoveryClient路由使用的谓词或过滤器,请设置spring.cloud.gateway.discovery.locator.predicates[x]
和spring.cloud.gateway.discovery.locator.filters[y]
。这样做时,如果您想保留该功能,您需要确保包含前面显示的默认谓词和过滤器。以下示例显示了它的样子:
spring.cloud.gateway.discovery.locator.predicates[0].name: Path
spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]: "'/'+serviceId+'/**'"
spring.cloud.gateway.discovery.locator.predicates[1].name: Host
spring.cloud.gateway.discovery.locator.predicates[1].args[pattern]: "'**.foo.com'"
spring.cloud.gateway.discovery.locator.filters[0].name: CircuitBreaker
spring.cloud.gateway.discovery.locator.filters[0].args[name]: serviceId
spring.cloud.gateway.discovery.locator.filters[1].name: RewritePath
spring.cloud.gateway.discovery.locator.filters[1].args[regexp]: "'/' + serviceId + '/?(?<remaining>.*)'"
spring.cloud.gateway.discovery.locator.filters[1].args[replacement]: "'/${remaining}'"
CORS 配置
您可以配置网关以控制 CORS 行为。全局 CORS 配置是 URL 模式到Spring Framework Cors Configuration的映射。以下示例配置 CORS:
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://docs.spring.io"
allowedMethods:
- GET
在前面的示例中,允许来自docs.spring.io所有 GET 请求路径的请求的 CORS 请求。
要为某些网关路由谓词未处理的请求提供相同的 CORS 配置,请将spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping属性设置为true。