← Dokumentace WAF / rate-limiting-rules
Vytvoření pravidla omezení frekvence požadavků přes API
Použijte Rulesets API k vytvoření pravidla omezení frekvence požadavků prostřednictvím API na úrovni zóny.
Pravidlo omezení rychlosti je podobné běžnému pravidlu zpracovávanému Ruleset Engine, ale obsahuje navíc ratelimit objekt s konfigurací rate limiting. Více informací najdete v Parametry omezení frekvence požadavků s dalšími informacemi o tomto poli a jeho parametrech.
Pravidla omezení frekvence požadavků musíte nasadit do http_ratelimit vstupní sada pravidel fáze.
Pravidla omezení frekvence požadavků musí být na konci seznamu pravidel.
Pokud používáte Terraform, přečtěte si Konfigurace pravidel omezení frekvence požadavků pomocí Terraformu.
Vytvoření pravidla omezení frekvence požadavků
Chcete-li vytvořit pravidlo omezení frekvence požadavků pro zónu, přidejte pravidlo s ratelimit objekt do http_ratelimit je vstupní sada pravidel dané fáze.
-
Vyvolejte Získání vstupní sady pravidel zóny operaci k získání definice vstupní sady pravidel pro
http_ratelimitfáze. Budete potřebovat ID zóny pro tento úkol. -
Pokud vstupní sada pravidel již existuje (to znamená, pokud jste obdrželi
200 OKstavový kód a definici sady pravidel), poznamenejte si ID sady pravidel z odpovědi. Poté zavolejte Vytvoření pravidla sady pravidel zóny operaci pro přidání pravidla rate limiting do stávající sady pravidel. Podrobnosti najdete v příkladech níže. -
Pokud vstupní sada pravidel neexistuje (to znamená, pokud jste obdrželi
404 Not Foundstavový kód v kroku 1), vytvořte ji pomocí Vytvoření rulesetu zóny operaci. Pravidlo rate limiting zahrňte dorulespole. Podívejte se na Vytvoření sady pravidel pro příklad.
Příklad A: omezení frekvence podle vlastností požadavku
Tento příklad přidává pravidlo omezení frekvence požadavků do http_ratelimit fáze vstupní sady pravidel pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My rate limiting rule",
"expression": "(http.request.uri.path matches \"^/api/\")",
"action": "block",
"ratelimit": {
"characteristics": [
"cf.colo.id",
"ip.src",
"http.request.headers[\"x-api-key\"]"
],
"period": 60,
"requests_per_period": 100,
"mitigation_timeout": 600
}
}'Chcete-li určit konkrétní pozici nového pravidla, zahrňte position objekt v těle požadavku podle pokynů v Změna pořadí pravidla v sadě pravidel.
Pokyny k vytvoření vstupní sady pravidel a definování jejích pravidel pomocí jediného volání API najdete v Přidat pravidla do vstupních sad pravidel fáze.
Příklad B: omezení frekvence s vlastní odpovědí
Tento příklad přidává pravidlo omezení frekvence požadavků do http_ratelimit fáze vstupní sady pravidel pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.
Nové pravidlo definuje vlastní odpověď pro požadavky blokované kvůli omezení rychlosti.
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My rate limiting rule",
"expression": "(http.request.uri.path matches \"^/api/\")",
"action": "block",
"action_parameters": {
"response": {
"status_code": 403,
"content": "You have been rate limited.",
"content_type": "text/plain"
}
},
"ratelimit": {
"characteristics": [
"cf.colo.id",
"ip.src",
"http.request.headers[\"x-api-key\"]"
],
"period": 60,
"requests_per_period": 100,
"mitigation_timeout": 600
}
}'Chcete-li určit konkrétní pozici nového pravidla, zahrňte position objekt v těle požadavku podle pokynů v Změna pořadí pravidla v sadě pravidel.
Pokyny k vytvoření vstupní sady pravidel a definování jejích pravidel pomocí jediného volání API najdete v Přidat pravidla do vstupních sad pravidel fáze.
Příklad C: omezení frekvence s vynecháním cachovaných prostředků
Tento příklad přidává pravidlo omezení frekvence požadavků do http_ratelimit fáze vstupní sady pravidel pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.
Nové pravidlo při výpočtu frekvence nezohledňuje požadavky na cachovaná aktiva ("requests_to_origin": true).
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My rate limiting rule",
"expression": "(http.request.uri.path matches \"^/api/\")",
"action": "block",
"ratelimit": {
"characteristics": [
"cf.colo.id",
"ip.src",
"http.request.headers[\"x-api-key\"]"
],
"period": 60,
"requests_per_period": 100,
"mitigation_timeout": 600,
"requests_to_origin": true
}
}'Chcete-li určit konkrétní pozici nového pravidla, zahrňte position objekt v těle požadavku podle pokynů v Změna pořadí pravidla v sadě pravidel.
Pokyny k vytvoření vstupní sady pravidel a definování jejích pravidel pomocí jediného volání API najdete v Přidat pravidla do vstupních sad pravidel fáze.
Příklad D: pravidlo omezení frekvence založené na komplexnosti
Tento příklad přidává pravidlo omezení frekvence požadavků do http_ratelimit fáze vstupní sady pravidel pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.
Nové pravidlo je pravidlo omezení frekvence požadavků založené na složitosti, které bere v úvahu my-score HTTP hlavičku odpovědi a na jejím základě vypočítá celkové skóre složitosti klienta. Čítač s celkovým skóre se aktualizuje, když dojde ke shodě s výrazem pro počítání pravidla omezení frekvence požadavků (v tomto případě stejným jako výraz pravidla, protože counting_expression je prázdný řetězec). Jakmile je tento celkový součet vyšší než 400 během období 60 sekund (jedna minuta), budou všechny pozdější požadavky klienta blokovány po dobu 600 sekund (10 minut).
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My complexity-based rate limiting rule",
"expression": "(http.request.uri.path wildcard \"/graphql/*\")",
"action": "block",
"ratelimit": {
"characteristics": [
"cf.colo.id",
"http.request.headers[\"x-api-key\"]"
],
"score_response_header_name": "my-score",
"score_per_period": 400,
"period": 60,
"mitigation_timeout": 600,
"counting_expression": ""
}
}'Chcete-li určit konkrétní pozici nového pravidla, zahrňte position objekt v těle požadavku podle pokynů v Změna pořadí pravidla v sadě pravidel.
Pokyny k vytvoření vstupní sady pravidel a definování jejích pravidel pomocí jediného volání API najdete v Přidat pravidla do vstupních sad pravidel fáze.
Další kroky
Použijte různé operace v Rulesets API, abyste pracovali s pravidlem, které jste právě vytvořili. Následující tabulka obsahuje seznam běžných úkolů pro práci s pravidly omezení frekvence požadavků na úrovni zóny:
| Úkol | Postup |
|---|---|
| Seznam všech pravidel v sadě pravidel | Použijte Získání vstupní sady pravidel zóny operaci s Další informace najdete v tématu Zobrazit konkrétní sadu pravidel. |
| Aktualizace pravidla | Použijte Aktualizace pravidla v sadě pravidel zóny operace. Budete muset zadat ID sady pravidel a ID pravidla. Chcete-li tato ID získat, můžete použít Získání vstupní sady pravidel zóny operaci s Další informace najdete v tématu Aktualizace pravidla v sadě pravidel. |
| Smazat pravidlo | Použijte Odstranění pravidla sady pravidel zóny operace. Budete muset zadat ID sady pravidel a ID pravidla. Chcete-li tato ID získat, můžete použít Získání vstupní sady pravidel zóny operaci s Další informace najdete v tématu Odstraňte pravidlo v sadě pravidel. |
Tyto operace popisuje dokumentace k Ruleset Engine. Ruleset Engine pohání různé produkty Cloudflare, včetně pravidel omezení frekvence požadavků.
Další zdroje
Pokyny k nasazení pravidel rate limitingu na úrovni účtu pomocí API najdete v Vytvoření sady pravidel pro omezení frekvence požadavků přes API.