Модуль ngx_http_limit_conn_module
| Пример конфигурации Директивы limit_conn limit_conn_dry_run limit_conn_log_level limit_conn_status limit_conn_zone limit_zone Встроенные переменные | 
Модуль ngx_http_limit_conn_module позволяет ограничить
число соединений по заданному ключу, в частности, число соединений с одного
IP-адреса.
Учитываются не все соединения, а лишь те, в которых имеются запросы, обрабатываемые сервером, и заголовок запроса уже прочитан.
Пример конфигурации
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 1;
        }
Директивы
| Синтаксис: | limit_conn  | 
|---|---|
| Умолчание: | — | 
| Контекст: | http,server,location | 
Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернёт ошибку. Например, директивы
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    location /download/ {
        limit_conn addr 1;
    }
разрешают одновременно обрабатывать не более одного соединения с одного IP-адреса.
В HTTP/2 и SPDY каждый параллельный запрос считается отдельным соединением.
Директив limit_conn может быть несколько.
Например, следующая конфигурация ограничивает число соединений с сервером
с одного клиентского IP-адреса и в то же время ограничивает общее число
соединений с виртуальным сервером:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    ...
    limit_conn perip 10;
    limit_conn perserver 100;
}
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы limit_conn.
| Синтаксис: | limit_conn_dry_run  | 
|---|---|
| Умолчание: | limit_conn_dry_run off; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.17.6.
Включает режим пробного запуска. В данном режиме число соединений не ограничивается, однако в зоне разделяемой памяти текущее число избыточных соединений учитывается как обычно.
| Синтаксис: | limit_conn_log_level 
 | 
|---|---|
| Умолчание: | limit_conn_log_level error; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 0.8.18.
Задаёт желаемый уровень записи в лог случаев ограничения числа соединений.
| Синтаксис: | limit_conn_status  | 
|---|---|
| Умолчание: | limit_conn_status 503; | 
| Контекст: | http,server,location | 
Эта директива появилась в версии 1.3.15.
Позволяет переопределить код ответа, используемый при отклонении запросов.
| Синтаксис: | limit_conn_zone 
     | 
|---|---|
| Умолчание: | — | 
| Контекст: | http | 
Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности содержит текущее число соединений. В качестве ключа можно использовать текст, переменные и их комбинации. Запросы с пустым значением ключа не учитываются.
До версии 1.7.6 в качестве ключа можно было задать ровно одну переменную.
Пример использования:
limit_conn_zone $binary_remote_addr zone=addr:10m;
 
Здесь в качестве ключа используется IP-адрес клиента.
Обратите внимание, что вместо переменной $remote_addr
использована переменная $binary_remote_addr.
Длина значения переменной $remote_addr может колебаться
от 7 до 15 байт, при этом размер хранимого состояния составляет
либо 32, либо 64 байта на 32-битных платформах и всегда 64
байта на 64-битных.
Длина значения переменной $binary_remote_addr всегда
равна 4 байтам для IPv4-адресов или 16 байтам для IPv6-адресов.
При этом размер состояния всегда равен 32 или 64 байтам
на 32-битных платформах и 64 байтам на 64-битных.
В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний
размером 32 байта или 16 тысяч состояний размером 64 байта.
При переполнении зоны в ответ на последующие запросы сервер будет
возвращать
ошибку.
Дополнительно, как часть коммерческой подписки, информацию о состоянии каждой такой зоны разделяемой памяти можно получить или сбросить при помощи API начиная с версии 1.17.7.
| Синтаксис: | limit_zone 
     | 
|---|---|
| Умолчание: | — | 
| Контекст: | http | 
Эта директива устарела в версии 1.1.8 и была удалена в версии 1.7.6. Вместо неё следует использовать аналогичную директиву limit_conn_zone с изменённым синтаксисом:
limit_conn_zone$переменнаяzone=название:размер;
Встроенные переменные
- $limit_conn_status
- 
хранит результат ограничения числа соединений (1.17.6):
PASSED,REJECTEDилиREJECTED_DRY_RUN
