在之前介绍了一些Spring Cloud Gateway配置项,接下来详细介绍下所有配置项。
可以在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 超时(响应和连接),并可以为每个路由特定配置。
1. 全局超时
配置全局 http 超时:
示例:
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5s
2 . 每个路由超时
要配置每条路由超时:
connect-timeout必须以毫秒为单位指定。
response-timeout必须以毫秒为单位指定。
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 中进行简单配置,该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类。
默认情况下,网关使用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 配置是 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。