You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Envoy同一HTTP端点配置全局与单用户双重限流并同时生效?

问题解答

你的判断是正确的

现有配置中,Envoy的限流规则采用匹配即终止的逻辑:当请求匹配到第一个带x-api-token的嵌套规则后,就不会再匹配第二个全局规则,导致全局限流完全失效。

正确配置方案

要让单用户限流和全局限流同时生效(请求必须同时通过两个维度的限流检查才允许访问),需要调整限流动作和描述符的结构,让Envoy同时发起两个独立的限流查询:

1. 调整Rate Limit Actions配置

通过separator动作分隔出两个独立的查询维度,同时生成用户维度和全局维度的限流请求:

- actions:
  # 生成用户维度限流查询:路径 + API Token
  - request_headers:
      header_name: "x-api-token"
      descriptor_key: "x-api-token"
  - request_headers:
      header_name: ":path"
      descriptor_key: "path"
  # 用空分隔符生成第二个独立查询
  - separator:
      separator: ""
  # 生成全局维度限流查询:仅路径
  - request_headers:
      header_name: ":path"
      descriptor_key: "path"

2. 保留Rate Limit Descriptors配置

确保两个维度的规则独立存在,无需修改原描述符结构:

domain: my_app
descriptors:
  # 单用户限流规则:特定路径下单个Token每分钟最多60次请求
  - key: path
    value: /my/endpoint
    descriptors:
      - key: x-api-token
        rate_limit:
          unit: minute
          requests_per_unit: 60
  # 全局限流规则:特定路径下所有请求每分钟最多600次请求
  - key: path
    value: /my/endpoint
    rate_limit:
      unit: minute
      requests_per_unit: 600

配置说明

  • separator动作会让Envoy向限流服务发送两个独立的查询请求:一个包含path和x-api-token(用户维度),另一个仅包含path(全局维度)。
  • 只有当两个查询都通过限流检查时,请求才会被放行;任意一个维度触发限流阈值,请求都会被拒绝,完全符合你提出的限流需求。

内容的提问来源于stack exchange,提问作者unpollito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:18