Документация Запланировать пилот

Создание правила ограничения скорости через API

Используйте Rulesets API чтобы создать правило ограничения скорости запросов через API на уровне зоны.

Правило ограничения скорости похоже на обычное правило, обрабатываемое Ruleset Engine, но содержит дополнительный ratelimit объект с конфигурацией ограничения скорости. См. Параметры ограничения скорости подробнее об этом поле и его параметрах.

Правила ограничения скорости необходимо развернуть в http_ratelimit входной набор правил фазы.

Правила ограничения скорости должны находиться в конце списка правил.

Если вы используете Terraform, см. Настройка правил ограничения скорости с помощью Terraform.

Создание правила ограничения скорости

Чтобы создать правило ограничения скорости для зоны, добавьте правило с ratelimit объект в http_ratelimit набор правил точки входа фазы.

  1. Вызовите Получить входной набор правил зоны операцию для получения определения входного набора правил для http_ratelimit фаза. Вам понадобится ID зоны для этой задачи.

  2. Если входной набор правил уже существует (то есть если вы получили 200 OK код состояния и определение набора правил), запишите ID набора правил из ответа. Затем вызовите Создание правила набора правил зоны операцию для добавления правила ограничения скорости в существующий набор правил. Подробности см. в примерах ниже.

  3. Если входной набор правил не существует (то есть если вы получили 404 Not Found код состояния на шаге 1), создайте его с помощью Создание набора правил зоны операцию. Включите своё правило ограничения скорости в rules массив. См. Создание набора правил для примера.

Пример A - Ограничение скорости на основе свойств запроса

В этом примере правило ограничения скорости добавляется в http_ratelimit входной набор правил фазы для зоны с ID $ZONE_ID. Входной набор правил фазы уже существует, с 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
		}
	}'

Чтобы задать конкретную позицию для нового правила, включите position объект в теле запроса в соответствии с рекомендациями из Изменение порядка правила в наборе правил.

Инструкции по созданию входного набора правил и определению его правил с помощью одного вызова API см. в Добавьте правила во входные наборы правил фазы.

Пример B - Ограничение скорости с пользовательским ответом

В этом примере правило ограничения скорости добавляется в http_ratelimit входной набор правил фазы для зоны с ID $ZONE_ID. Входной набор правил фазы уже существует, с 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",
		"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
		}
	}'

Чтобы задать конкретную позицию для нового правила, включите position объект в теле запроса в соответствии с рекомендациями из Изменение порядка правила в наборе правил.

Инструкции по созданию входного набора правил и определению его правил с помощью одного вызова API см. в Добавьте правила во входные наборы правил фазы.

Пример C - Ограничение скорости без учета кешированных ресурсов

В этом примере правило ограничения скорости добавляется в http_ratelimit входной набор правил фазы для зоны с ID $ZONE_ID. Входной набор правил фазы уже существует, с ID $RULESET_ID.

Новое правило не учитывает запросы к кешированным ресурсам при расчёте скорости ("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
		}
	}'

Чтобы задать конкретную позицию для нового правила, включите position объект в теле запроса в соответствии с рекомендациями из Изменение порядка правила в наборе правил.

Инструкции по созданию входного набора правил и определению его правил с помощью одного вызова API см. в Добавьте правила во входные наборы правил фазы.

Пример D - Правило ограничения скорости на основе сложности

В этом примере правило ограничения скорости добавляется в http_ratelimit входной набор правил фазы для зоны с ID $ZONE_ID. Входной набор правил фазы уже существует, с ID $RULESET_ID.

Новое правило представляет собой правило ограничения скорости на основе сложности запроса, которое учитывает my-score HTTP-заголовок ответа для расчета общего показателя сложности клиента. Счетчик с общим показателем обновляется при совпадении с выражением подсчета правила ограничения скорости (в данном случае оно совпадает с выражением правила, поскольку counting_expression является пустой строкой). Когда эта суммарная оценка становится больше 400 в течение периода 60 секунд (одна минута), все последующие запросы клиента будут заблокированы на период 600 секунд (10 минут).

Создание правила набора правил зоны
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": ""
		}
	}'

Чтобы задать конкретную позицию для нового правила, включите position объект в теле запроса в соответствии с рекомендациями из Изменение порядка правила в наборе правил.

Инструкции по созданию входного набора правил и определению его правил с помощью одного вызова API см. в Добавьте правила во входные наборы правил фазы.


Следующие шаги

Используйте различные операции в Rulesets API для работы с только что созданным правилом. В следующей таблице приведён список распространённых задач при работе с правилами ограничения частоты запросов на уровне зоны:

Задача Процедура
Список всех правил в наборе правил

Используйте Получить входной набор правил зоны операцию с http_ratelimit имя фазы, чтобы получить список настроенных правил ограничения частоты запросов и их ID.

Подробнее см. в Просмотреть конкретный набор правил.

Обновить правило

Используйте Обновление правила в наборе правил зоны операцию.

Потребуется указать ID набора правил и ID правила. Чтобы получить эти ID, можно использовать Получить входной набор правил зоны операцию с http_ratelimit имя фазы.

Подробнее см. в Обновление правила в наборе правил.

Удаление правила

Используйте Удаление правила набора правил зоны операцию.

Потребуется указать ID набора правил и ID правила. Чтобы получить эти ID, можно использовать Получить входной набор правил зоны операцию с http_ratelimit имя фазы.

Подробнее см. в Удалите правило в наборе правил.

Эти операции описаны в документации Ruleset Engine. Ruleset Engine используется в разных продуктах Cloudflare, включая правила ограничения скорости.

Дополнительные ресурсы

Инструкции по развёртыванию правил ограничения скорости на уровне аккаунта через API см. в Создание набора правил ограничения скорости через API.

Запросите бесплатный пилот

Запланировать пилот