Параметр limit_req#

Группа параметров limit_req предназначена для ограничения скорости обработки запросов. В ней определяется, требуется ли пропускать избыточные запросы в пределах всплеска без задержки.

Название

Обязательность

Описание

Возможные значения

Значение по умолчанию

enabled

Обязательный

Вкл./Откл. модуля limit_req

true, false

—

rate

Обязательный (если mem_limit is None и cpu_limit is None)

Предел количества запросов в секунду. Разрешающая способность — миллисекунды, т.е. 10RPS означает не более 1 запроса в 100мсек

Целочисленное значение

—

target

Обязательный

Ключ, по которому происходит ограничение. Для сервиса типа http_proxy применяются значения service или src_ip. При этом target: service не работает для сервиса service_main_proxy

src_ip — ограничение происходит по количеству запросов для каждого ip адреса клиента отдельно; service — ограничение происходит в разрезе сервиса; request_method — ограничение происходит в разрезе метода запроса; любые переменные, которые можно указать с $, например $server_port

—

rate_interval

Опциональный

Интервал времени для измерения скорости запроса. Если необходимо 0.5r/s, то можно указать 30r/m

Текстовое значение с суффиксом: s — секунды; m — минуты

Значения задаются в s

size

Опциональный

Размер разделяемой памяти для хранения статистики количества запросов в секунду для каждого ip адреса

Текстовое значение с суффиксом: число без суффикса — байты; k/K — килобайты; m/M — мегабайты

10m

burst

Опциональный

Максимальное количество запросов, которые может выполнить клиент сверх значения, заданного параметром rate. Если скорость поступления запросов превышает rate, то их обработка задерживается так, чтобы запросы обрабатывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока их число не превысит максимальный размер всплеска. При превышении уровня всплеска запрос клиента завершается с ошибкой, которая указана в настройках

Целочисленное значение

0

cpu_limit

Опциональный (если rate is None, mem_limit is None и /system/optional/get_load/enabled == True)

Максимальная загрузка CPU в процентах. После превышения указанного значения, все входящие соединения будут отклонены

Целочисленное значение

—

mem_limit

Опциональный (если rate is None, cpu_limit is None и /system/optional/get_load/enabled == True)

Максимальная загрузка памяти в процентах. После превышения указанного значения, все входящие соединения будут отклонены

Целочисленное значение

—

policy_type

Опциональный (если target == src_ip)

Тип политики

allow — действие будет выполняться для ip в exclude_ip; forbid — действие будет выполнено для всех ip, кроме ip в exclude_ip

forbid

exclude_ip

Опциональный (если target == src_ip)

Имена исключаемых ip

Последовательность строковых значений

—

nodelay

Опциональный

Требуется ли пропускать избыточные запросы в пределах всплеска без задержки

true, false

false

forbid_action

Опциональный

Endpoint для редиректа

Строковое значение

—

status_code

Опциональный

Код ответа при превышении допустимого объема запроса или частоты вызовов

Текстовое значение

403

dry_run

Опциональный

Режим пробного запуска. В данном режиме скорость обработки запросов не ограничивается, однако в зоне разделяемой памяти текущее число избыточных запросов учитывается как обычно

true, false

true

condition

Опциональный

Результат выражения, в зависимости от которого выполняется или не выполняется ограничение

Группа параметров и их значения

—

condition.condition_var

Обязательный (в рамках condition)

Обозначение результата выражения

Строковое значение. Необходим знак „$“ перед именем

—

condition.condition_value

Обязательный (в рамках condition)

Значение результата выражения

Строковое значение

—

condition.type

Обязательный (в рамках condition)

Условие применимости результата выражения, в зависимости от выражения

ifall, ifany, if

—

condition.expression

Опциональный (в рамках condition)

Выражение, включающее в себя следующие параметры: variable, operation, value

Последовательность параметров и их значения

—

condition.expression.variable

Обязательный (в рамках expression)

Обозначение имени переменной

Строковое значение. Необходим знак „$“ перед именем

—

condition.expression.operation

Опциональный (в рамках expression)

Операция выражения

>=, =, >, <, <=, !=, ~, ~*, !~, !~*, -f, !-f, -d, !-d, -e, !-e, -x, !-x

—

condition.expression.value

Опциональный (в рамках expression)

Значение переменной

Строковое значение

—

Пример:

limit_req:
  enabled: true
  target: service
  rate: 60
  burst: 10
  size: 100m
  nodelay: True
  status_code: 403
  forbid_action: /web
  condition:
    condition_var: $var
    condition_value: '1'
    type: ifall
    expression:
      - operation: '>='
        variable: $insensitive_percent
        value: '0'
      - operation: '<'
        variable: $insensitive_percent
        value: '30'