请求限制问题和 HTTP 403 - 禁止访问问题
参考有关 Azure API 管理 故障排除系列的文章,这是实验室的第五个方案。 请确保已按照此说明执行实验室设置说明,以重新创建问题。
原始产品版本:API 管理服务
原始 KB 数: 4464928
现象
资源 API 提取用户的个人信息、社交媒体帖子、评论和照片,并利用为机器学习项目返回的响应。 奇怪的是,在使用几天后, GetPosts 操作开始引发 HTTP 403 - 禁止 访问错误,而其他操作按预期工作。
{
“statusCode”: 403,
“message”: “Forbidden”
}
除了上述内容,我们还遇到 HTTP 429 - 在调用每秒请求的 GetComments 操作时出错过多。 问题会在 10 秒后自动解决,但在再次调用 API 后会再次出现。 对于其他操作,不会观察到该行为。
{
"statusCode": 429,
“message”:“超出速率限制。 在 5 秒内重试。
}
疑难解答步骤
当实现了任何访问限制策略时,有可能会引发 HTTP 403 - 禁止访问 错误。
请检查 APIM 检查器跟踪,你会注意到存在“ip-filter”策略,该策略会筛选来自特定 IP 地址和/或地址范围的(允许/拒绝)调用。
若要检查“ip-filter”策略的范围,请选择“ 计算有效策略 ”按钮。 如果未看到在任何范围内实施的任何访问限制策略,则应在产品级别执行下一个验证步骤,方法是导航到关联的产品,然后单击“策略”选项。
<inbound> <base /> <choose> <when condition="@(context.Operation.Name.Equals("GetPosts"))"> <ip-filter action="forbid"> <address-range from="0.0.0.0" to="255.255.255.255" /> </ip-filter> </when> </choose> </inbound>
对于第二个问题(HTTP 429 - 请求过多),我们将遵循相同的过程,检查 APIM 检查器跟踪,并检查是否有在任何范围内实现的任何“速率限制”或“速率限制-键”策略。
如果计算有效策略,则应注意到在全局范围内实现的访问限制策略(即在“所有 API”选项中的“入站处理”下)。
<inbound> <choose> <when condition="@(context.Operation.Name.Equals("GetComments"))"> <rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" /> </when> </choose> </inbound>
详细了解 APIM 中的 ip-filter 和 rate-limit-by-key 策略。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。