Модуль ngx_stream_limit_conn_module
Пример конфигурации Директивы limit_conn limit_conn_dry_run limit_conn_log_level limit_conn_zone Встроенные переменные |
Модуль ngx_stream_limit_conn_module
(1.9.3) позволяет
ограничить
число соединений по заданному ключу, в частности, число соединений с одного
IP-адреса.
Пример конфигурации
stream { limit_conn_zone $binary_remote_addr zone=addr:10m; ... server { ... limit_conn addr 1; limit_conn_log_level error; } }
Директивы
Синтаксис: |
limit_conn |
---|---|
Умолчание: | — |
Контекст: |
stream , server |
Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа сервер закроет соединение. Например, директивы
limit_conn_zone $binary_remote_addr zone=addr:10m; server { ... limit_conn addr 1; }
разрешают одновременно обрабатывать не более одного соединения с одного IP-адреса.
Допустимо одновременное указание нескольких директив
limit_conn
,
при этом будет срабатывать любое из ограничений.
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы limit_conn
.
Синтаксис: |
limit_conn_dry_run |
---|---|
Умолчание: |
limit_conn_dry_run off; |
Контекст: |
stream , server |
Эта директива появилась в версии 1.17.6.
Включает режим пробного запуска. В данном режиме число соединений не ограничивается, однако в зоне разделяемой памяти текущее число избыточных соединений учитывается как обычно.
Синтаксис: |
limit_conn_log_level
|
---|---|
Умолчание: |
limit_conn_log_level error; |
Контекст: |
stream , server |
Задаёт желаемый уровень записи в лог случаев ограничения числа соединений.
Синтаксис: |
limit_conn_zone
|
---|---|
Умолчание: | — |
Контекст: |
stream |
Задаёт параметры зоны разделяемой памяти, которая хранит состояние
для разных значений ключа.
Состояние в частности содержит текущее число соединений.
В качестве ключа
может использоваться текст, переменные
и их комбинации (1.11.2).
Запросы с пустым значением ключа не учитываются.
Пример использования:
limit_conn_zone $binary_remote_addr zone=addr:10m;
Здесь в качестве ключа используется IP-адрес клиента,
задаваемый переменной $binary_remote_addr
.
Длина значения $binary_remote_addr
равна 4 байтам для IPv4-адресов или 16 байтам для IPv6-адресов.
При этом размер состояния всегда равен 32 или 64 байтам
на 32-битных платформах и 64 байтам на 64-битных.
В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний
размером 32 байта или 16 тысяч состояний размером 64 байта.
При переполнении зоны сервер закроет соединение.
Дополнительно, как часть коммерческой подписки, информацию о состоянии каждой такой зоны разделяемой памяти можно получить или сбросить при помощи API начиная с версии 1.17.7.
Встроенные переменные
$limit_conn_status
-
хранит результат ограничения числа соединений (1.17.6):
PASSED
,REJECTED
илиREJECTED_DRY_RUN