Модуль 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 on | off;
Умолчание:
limit_conn_dry_run off;
Контекст: stream, server

Эта директива появилась в версии 1.17.6.

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

Синтаксис: limit_conn_log_level info | notice | warn | error;
Умолчание:
limit_conn_log_level error;
Контекст: stream, server

Задаёт желаемый уровень записи в лог случаев ограничения числа соединений.

Синтаксис: limit_conn_zone ключ 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