簡體   English   中英

嘗試在 Azure 中對 API 管理執行限速策略

[英]Trying to implement Rate Limiting Policy on API Management in Azure

我正在嘗試在 Azure APIM 中設置一個策略,我可以在其中對 API 的調用進行速率限制,而且還將一系列 IP 列入白名單,這樣它們就不會被速率限制策略阻止。

理想情況下,我想在 60 秒內將每個 IP 的調用次數限制為 60 次,除非它來自列入白名單的 IP 地址(我們使用設定范圍將信息拉到外部依賴項,這會超過速率,因此需要他們仍然這樣做那)

到目前為止,我已經嘗試了以下操作(IP 和后端 ID 已在此處更改:)):

    <set-backend-service id="apim-generated-policy" backend-id="name-of-my-function-app" />
    <rate-limit-by-key calls="60" renewal-period="60" counter-key="@(context.Request.IpAddress)" increment-condition="@(context.Response.StatusCode == 204 ^ context.Response.StatusCode == 404)" remaining-calls-variable-name="remainingCallsPerIP" />
    <ip-filter action="allow">
        <address-range from="10.0.0.0" to="10.0.0.254"/>
        <address-range from="10.1.0.0" to="10.1.0.254"/>
        <address-range from="10.2.0.0" to="10.2.0.254"/>
        <address>10.20.30.40</address>
    </ip-filter>

我有另一個項目的“按鍵調用速率限制”部分 - 但問題是當我嘗試將 IP 過濾器/白名單應用到其中時。

我發現的是,使用上述代碼不應用速率限制,但它應用速率限制,但前提是您是 IP 過濾器的一部分。

我想我需要嘗試以某種方式插入 IF 模塊,這樣如果您屬於 IP 范圍,它會忽略這些調用嗎? 這是制定政策的最佳方式,還是有其他方式?

設法擺弄它,我已經回答了我自己的問題。

如果有人需要,答案是:

<policies>
<inbound>
<base />
<set-backend-service id="apim-generated-policy" backend-id="name-of-my-function-app" />
<rate-limit-by-key calls="100" renewal-period="60" counter-key="@(context.Request.Ip)" >
<whitelist>
<add ip="10.0.0.0/24"/>
<add ip="10.1.0.0/24"/>
<add ip="10.2.0.0/24"/>
<add ip="20.77.50.57"/>
  </whitelist>
  <on-exceeded>
    <return-response>
      <set-status code="429" reason="Too Many Requests" />
    </return-response>
  </on-exceeded>
</rate-limit-by-key>
</inbound>
</policies>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM