Skip to content

Traefik InFlightReq 中间件文档

InFlightReq(并发请求限制)

inFlightReq 中间件主动防止服务因高负载而不堪重负。

  • 当某来源(基于 sourceCriterion)的并发请求数达到 amount 时,新请求将被拒绝并返回 429 Too Many Requests
  • 该中间件对于保护资源受限的后端服务特别有用。

配置示例

YAML 格式:

yaml
# 限制为 10 个并发连接
http:
  middlewares:
    test-inflightreq:
      inFlightReq:
        amount: 10

TOML 格式:

toml
# 限制为 10 个并发连接
[http.middlewares]
  [http.middlewares.test-inflightreq.inFlightReq]
    amount = 10

Labels 格式:

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 Requests0
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:depthexcludedIPsipv6Subnet

作为中间件,限流在实际代理到后端之前发生。 此外,前一跳网络节点仅在代理的最后阶段被附加到 X-Forwarded-For,即在限流已经通过之后。 因此,在限流期间,由于前一跳尚未出现在 X-Forwarded-For 中,因此无法找到和/或依赖它。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布