Anforderungsdrosselungsprobleme und HTTP 403 – Unzulässige Probleme
In Bezug auf den Artikel zur Azure API Management Troubleshooting Series ist dies das fünfte Szenario des Labors. Stellen Sie sicher, dass Sie die Anweisungen zum Einrichten des Labors entsprechend befolgt haben, um das Problem neu zu erstellen.
Ursprüngliche Produktversion: API-Verwaltungsdienst
Ursprüngliche KB-Nummer: 4464928
Symptome
Die Ressourcen-API ruft die persönlichen Details des Benutzers, Beiträge in sozialen Medien, Kommentaren und Fotos ab und verwendet die antwort, die für ein Machine Learning-Projekt zurückgegeben wird. Seltsamerweise nach einigen Tagen der Verwendung hat der GetPosts-Vorgang mit dem Auslösen von HTTP 403 - Verbotener Fehler begonnen, während die anderen Vorgänge wie erwartet funktionieren.
{
"statusCode": 403,
"message": "Verboten"
}
Abgesehen von den oben genannten, treten auch HTTP 429 - Zu viele Anforderungen beim Aufrufen des GetComments-Vorgangs für jede zweite Anforderung auf. Das Problem wird nach 10 Sekunden automatisch behoben, aber es wird erneut ausgeführt, sobald der erste Aufruf der API erneut erfolgt. Das Verhalten wird für die anderen Vorgänge nicht beobachtet.
{
"statusCode": 429,
"message": "Rate limit is exceeded. Versuchen Sie es in 5 Sekunden erneut."
}
Schritte zur Fehlersuche
Der Fehler HTTP 403 – Verboten kann ausgelöst werden, wenn eine Richtlinie für Zugriffseinschränkung implementiert worden ist.
Überprüfen Sie die Ablaufverfolgung des APIM-Inspektors. Sie sollten feststellen, dass eine Richtlinie „Ip-filter“ vorhanden ist, die Aufrufe von bestimmten IP-Adressen und/oder Adressbereichen filtert (zulässt/ablehnt).
Um den Gültigkeitsbereich der Richtlinie "ip-filter" zu überprüfen, wählen Sie die Schaltfläche "Effektive Richtlinie berechnen" aus. Wenn keine Zugriffseinschränkungsrichtlinie in einem Beliebigen Bereich implementiert wird, sollte der nächste Überprüfungsschritt auf Produktebene erfolgen, indem Sie zum zugehörigen Produkt navigieren und dann auf die Option "Richtlinien" klicken.
<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>
Für das zweite Problem (HTTP 429 – Zu viele Anforderungen) folgen wir demselben Verfahren, indem wir die APIM-Inspektorablaufverfolgung überprüfen und überprüfen, ob eine Richtlinie für "Rate-Limit" oder "Rate-limit-by-key" in jedem Bereich implementiert ist.
Wenn Sie die effektive Richtlinie berechnen, sollten Sie eine Zugriffseinschränkungsrichtlinie (Rate-limit-by-key) im globalen Bereich implementieren, d. h. unter "Eingehende Verarbeitung" in der Option "Alle APIs".
<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>
Weitere Informationen zu IP-Filter - und Rate-Limit-by-Key-Richtlinien in APIM.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.