请求限制问题和 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-filterrate-limit-by-key 策略。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。