Traefik InFlightReq 中间件文档
InFlightReq(并发请求限制)
inFlightReq 中间件主动防止服务因高负载而不堪重负。
- 当某来源(基于 sourceCriterion)的并发请求数达到
amount时,新请求将被拒绝并返回429 Too Many Requests。 - 该中间件对于保护资源受限的后端服务特别有用。
配置示例
YAML 格式:
yaml
# 限制为 10 个并发连接
http:
middlewares:
test-inflightreq:
inFlightReq:
amount: 10TOML 格式:
toml
# 限制为 10 个并发连接
[http.middlewares]
[http.middlewares.test-inflightreq.inFlightReq]
amount = 10Labels 格式:
yaml
labels:
- "traefik.http.middlewares.test-inflightreq.inflightreq.amount=10"Kubernetes 格式:
yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-inflightreq
spec:
inFlightReq:
amount: 10配置选项
| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
amount | 允许的最大并发请求数。达到此值后,Traefik 将响应 429 Too Many Requests。 | 0 | 是 |
sourceCriterion.requestHost | 是否将请求主机视为来源。更多信息参见 sourceCriterion。 | false | 否 |
sourceCriterion.requestHeaderName | 用于对传入请求进行分组的请求头名称。更多信息参见 sourceCriterion。 | "" | 否 |
sourceCriterion.ipStrategy.depth | 从右起在 X-Forwarded-For 头中选择 IP 的深度位置。更多信息参见 ipStrategy。 | 0 | 否 |
sourceCriterion.ipStrategy.excludedIPs | 允许扫描 X-Forwarded-For 头并选择第一个不在该列表中的 IP。如果指定了 depth,则忽略 excludedIPs。更多信息参见 ipStrategy。 | [] | 否 |
sourceCriterion.ipStrategy.ipv6Subnet | 如果选中的 IP 是 IPv6,则将其转换为其所属子网的第一个 IP。更多信息参见 ipStrategy。 | "" | 否 |
sourceCriterion
sourceCriterion 选项定义将哪些请求分组为来自同一来源的标准。如果同时定义多个策略,则会引发错误。如果未设置任何策略,则默认使用请求的远程地址字段(作为 ipStrategy)。
ipStrategy
ipStrategy 选项定义了三个参数,配置 Traefik 如何确定客户端 IP:depth、excludedIPs 和 ipv6Subnet。
作为中间件,限流在实际代理到后端之前发生。 此外,前一跳网络节点仅在代理的最后阶段被附加到 X-Forwarded-For,即在限流已经通过之后。 因此,在限流期间,由于前一跳尚未出现在 X-Forwarded-For 中,因此无法找到和/或依赖它。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。