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