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

如何在Azure API Management中实现无订阅公网API的按客户端限流

解决Azure APIM中公开API的客户端级速率限制问题

我懂你的需求:要让部分API公开无需用户订阅,同时每个独立客户端(按IP区分)每分钟最多调用10次。你现在遇到的问题是,用无密钥订阅加全局速率限制后,所有客户端共享同一个配额,导致新设备也触发429。下面是具体的解决方法:

一、取消基于订阅的速率限制,改为允许匿名访问

首先你不需要依赖无密钥订阅来实现公开API,反而要配置API允许匿名访问:

  • 进入Azure APIM实例,找到目标API,切换到设置标签页
  • 在订阅要求部分,选择不需要,保存更改。这样用户无需订阅就能调用API。

二、添加基于客户端IP的速率限制策略

接下来要给API添加针对客户端IP的速率限制,确保每个独立IP有自己的配额。你需要修改API的入站策略,替换原来的订阅级rate-limit,改用rate-limit-by-key策略,以客户端IP作为区分键:

<inbound>
    <!-- 保留你已有的其他入站策略(如果存在) -->
    <rate-limit-by-key calls="10" renewal-period="60" counter-key="@(context.Request.IpAddress)" />
</inbound>

策略参数说明:

  • calls="10":设置每分钟允许的最大调用次数
  • renewal-period="60":配额重置周期(单位为秒,这里60秒即1分钟)
  • counter-key="@(context.Request.IpAddress)":用客户端IP作为计数的唯一标识,确保每个IP独立统计调用次数

三、验证效果

配置完成后测试:

  • 用设备A在1分钟内调用10次,第11次会收到429状态码
  • 同时用设备B(不同公网IP)调用,即使设备A已经触发限制,设备B依然能正常调用直到自己的10次配额用完

补充说明

如果你的场景中,多个客户端可能共享同一个公网IP(比如同一公司网络下的设备),IP区分会把他们当成同一个客户端。如果需要更精细的区分,可以考虑用自定义客户端标识头(比如X-Client-ID)作为counter-key,但这需要客户端配合传递这个头参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:59:25