INTEGRITY Dokumentace

Vytvoření pravidla rate limitingu přes API

Použijte Rulesets API k vytvoření pravidla rate limitingu přes API na úrovni zóny.

Pravidlo rate limitingu je podobné běžnému pravidlu zpracovávanému Ruleset Enginem, ale obsahuje navíc ratelimit objekt s konfigurací rate limitingu. Viz Parametry rate limitingu pro více informací o tomto poli a jeho parametrech.

Pravidla rate limitingu musíte nasadit do http_ratelimit entry point ruleset fáze.

Pravidla rate limitingu se musí nacházet na konci seznamu pravidel.

Pokud používáte Terraform, viz Konfigurace pravidel rate limitingu pomocí Terraformu.

Vytvoření pravidla rate limitingu

Chcete-li vytvořit pravidlo rate limitingu pro zónu, přidejte pravidlo s ratelimit objekt do http_ratelimit vstupní sada pravidel fáze.

  1. Vyvolejte Získání vstupní sady pravidel zóny operaci k získání definice entry point rulesetu pro fázi http_ratelimit fázi. Budete potřebovat ID zóny pro tuto úlohu.

  2. Pokud entry point ruleset již existuje (tedy pokud jste obdrželi 200 OK stavový kód a definici sady pravidel), poznamenejte si ID sady pravidel z odpovědi. Poté zavolejte Vytvoření pravidla v sadě pravidel zóny operaci k přidání pravidla rate limitingu do existující sady. Podrobnosti najdete v příkladech níže.

  3. Pokud entry point ruleset neexistuje (tedy pokud jste obdrželi 404 Not Found stavový kód v kroku 1), vytvořte jej pomocí Vytvoření sady pravidel zóny operaci. Své pravidlo rate limitingu zahrňte do rules pole. Viz Create ruleset pro příklad.

Příklad A - Rate limiting na základě vlastností požadavku

Tento příklad přidává pravidlo rate limitingu do http_ratelimit (entry point ruleset fáze) pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.

Vytvoření pravidla v sadě pravidel zóny
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
		}
	}'

Pro definici konkrétní pozice 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 definici jejích pravidel jediným API voláním najdete v Přidání pravidel do vstupních sad pravidel fází.

Příklad B – Rate limiting s vlastní odpovědí

Tento příklad přidává pravidlo rate limitingu do http_ratelimit (entry point ruleset fáze) 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 rate limitingu.

Vytvoření pravidla v sadě pravidel zóny
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
		}
	}'

Pro definici konkrétní pozice 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 definici jejích pravidel jediným API voláním najdete v Přidání pravidel do vstupních sad pravidel fází.

Příklad C – Rate limiting ignorující cachovaná aktiva

Tento příklad přidává pravidlo rate limitingu do http_ratelimit (entry point ruleset fáze) 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 assety v cache ("requests_to_origin": true).

Vytvoření pravidla v sadě pravidel zóny
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
		}
	}'

Pro definici konkrétní pozice 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 definici jejích pravidel jediným API voláním najdete v Přidání pravidel do vstupních sad pravidel fází.

Příklad D - Pravidlo rate limitingu založené na složitosti

Tento příklad přidává pravidlo rate limitingu do http_ratelimit (entry point ruleset fáze) pro zónu s ID $ZONE_ID. Vstupní sada pravidel fáze již existuje, s ID $RULESET_ID.

Nové pravidlo je pravidlo rate limitingu založené na komplexitě, které bere v úvahu my-score HTTP hlavičku odpovědi pro výpočet celkového skóre složitosti klienta. Čítač s celkovým skóre se aktualizuje při shodě s výrazem pro počítání pravidla rate limitingu (v tomto případě je totožný s výrazem pravidla, protože counting_expression je prázdný řetězec). Když toto celkové skóre překročí 400 během období 60 sekund (jedna minuta), budou další požadavky klienta blokovány po dobu 600 sekund (10 minut).

Vytvoření pravidla v sadě pravidel zóny
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": ""
		}
	}'

Pro definici konkrétní pozice 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 definici jejích pravidel jediným API voláním najdete v Přidání pravidel do vstupních sad pravidel fází.


Další kroky

Použijte jednotlivé operace v Rulesets API pro práci s pravidlem, které jste právě vytvořili. Následující tabulka obsahuje seznam běžných úloh pro práci s pravidly rate limitingu na úrovni zóny:

Úloha Postup
Výpis všech pravidel v rulesetu

Použijte Získání vstupní sady pravidel zóny operaci s http_ratelimit názvem fáze, abyste získali seznam nakonfigurovaných pravidel rate limitingu a jejich ID.

Další informace viz Zobrazení konkrétní sady pravidel.

Aktualizace pravidla

Použijte Aktualizace pravidla v rulesetu zóny operace.

Budete muset zadat ID sady pravidel a ID pravidla. K získání těchto ID můžete použít Získání vstupní sady pravidel zóny operaci s http_ratelimit názvem fáze.

Další informace viz Aktualizace pravidla v sadě pravidel.

Smazání pravidla

Použijte Odstranění pravidla ze sady pravidel zóny operace.

Budete muset zadat ID sady pravidel a ID pravidla. K získání těchto ID můžete použít Získání vstupní sady pravidel zóny operaci s http_ratelimit názvem fáze.

Další informace viz Smazání pravidla v sadě pravidel.

Tyto operace jsou popsány v dokumentaci Ruleset Engine. Ruleset Engine pohání různé produkty Cloudflare, včetně pravidel rate limitingu.

Další zdroje

Pokyny k nasazení pravidel rate limitingu na úrovni účtu přes API najdete v Vytvoření sady pravidel rate limitingu přes API.