← Документация WAF / rate-limiting-rules
Устранение неполадок правил rate limiting
Некоторые подзапросы Workers учитываются как отдельные запросы
Cloudflare может учитывать подзапросы Workers в той же зоне как отдельные запросы, из-за чего правило rate limiting сработает раньше, чем ожидалось. Такое поведение возникает, когда правило rate limiting настроено с Также применять rate limiting к кешированным ресурсам со значением false.
Чтобы предотвратить такое поведение, исключите из правила rate limiting все подзапросы Workers из той же зоны, используя cf.worker.upstream_zone (поле). Например, вы можете добавить следующее подвыражение в ваше выражение правила rate limiting:
and (cf.worker.upstream_zone == "" or cf.worker.upstream_zone != "<YOUR_ZONE>")Первое условие (проверка на пустую строку) будет соответствовать прямым запросам посетителей, а второе — подзапросам, исходящим не из вашей зоны, фактически исключая подзапросы из той же зоны из-под действия правила rate limiting.
Правила rate limiting с условиями по имени хоста и Origin Rules
Если вы используете Origin Rules , чтобы переписать Host, а ваше правило rate limiting включает http.host в выражении или характеристиках подсчёта, правило может совпадать с входящими запросами, но не увеличивать свой счётчик.
Это происходит потому, что выражение правила rate limiting оценивается в две фазы:
- Фаза запроса (сопоставление правила): выражение вычисляется по исходному запросу, где
http.hostсодержит исходное имя хоста. Правило срабатывает, как ожидается. - Фаза ответа (увеличение счётчика): если правило использует выражение подсчёта или имеет Также применять rate limiting к кешированным ресурсам выключен, увеличение счётчика происходит после ответа. К этому моменту Origin Rules уже переписали
Host(заголовок) на новое значение, поэтому выражение с исходным именем хоста больше не срабатывает.
В результате правило совпадает с запросами, но счётчик никогда не увеличивается, и лимит частоты никогда не применяется.
Решение
Чтобы это исправить, выполните одно из следующего:
- Удалите
http.host(условия) из выражения подсчёта и использовать другие поля (такие какhttp.request.uri.path), чтобы ограничить область действия счётчика. - Обновите выражение подсчёта, чтобы оно использовало переписанное имя хоста вместо исходного.
- Добавьте в выражение подсчёта и исходное, и переписанное имя хоста с помощью
or(условие).
Поведение fail-open в rate limiting
Правила rate limiting Cloudflare работают в режиме режим fail-open (пропуская запросы, а не блокируя их) при перегрузке инфраструктуры. Когда базовая инфраструктура испытывает высокую нагрузку, Cloudflare может пропускать обновление счётчиков частоты и применение ограничений для затронутых запросов вместо блокировки легитимного трафика.
Видимого для клиента сигнала о событиях fail-open нет. Если правило rate limiting не блокирует трафик, который должно перехватывать (ложноотрицательный результат), а конфигурация правила корректна, причиной может быть нагрузка на инфраструктуру в затронутом дата-центре.
Подсчёт по дата-центрам: Счётчики rate limiting ведутся отдельно для каждого дата-центра Cloudflare. Если трафик распределён между многими дата-центрами, частота в каждом отдельном дата-центре может оставаться ниже порогового значения, даже когда суммарная частота его превышает. Учитывайте это при настройке пороговых значений для глобально распределённого трафика.