<!-- review: finished -->

<a id="http-limit-conn"></a>

# Limit Conn

Позволяет ограничить число соединений по заданному ключу, в частности, число соединений с одного IP-адреса.

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

<a id="configuration-example-25"></a>

## Пример конфигурации

```nginx
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }
```

<a id="directives-26"></a>

## Директивы

<a id="index-0"></a>

<a id="limit-conn-1"></a>

### limit_conn

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn` зона число;   |
|------------------------------------------------------------------------------------------|----------------------------|
| По умолчанию                                                                             | —                          |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location     |

Задает зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернет [ошибку](#limit-conn-status). Например, директивы

```nginx
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }
```

разрешают одновременно обрабатывать не более одного соединения с одного IP-адреса.

#### NOTE
В HTTP/2 и HTTP/3 каждый параллельный запрос считается отдельным соединением.

Директив limit_conn может быть несколько. Например, следующая конфигурация ограничивает число соединений с сервером с одного клиентского IP-адреса и в то же время ограничивает общее число соединений с виртуальным сервером:

```nginx
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.

<a id="index-1"></a>

<a id="limit-conn-dry-run"></a>

### limit_conn_dry_run

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_dry_run` `on` | `off`;   |
|------------------------------------------------------------------------------------------|--------------------------------------|
| По умолчанию                                                                             | `limit_conn_dry_run off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location               |

Включает режим пробного запуска. В данном режиме число соединений не ограничивается, однако в [зоне разделяемой памяти](#limit-conn-zone) текущее число избыточных соединений учитывается как обычно.

<a id="index-2"></a>

<a id="limit-conn-log-level"></a>

### limit_conn_log_level

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_log_level` `info` | `notice` | `warn` | `error`;   |
|------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| По умолчанию                                                                             | `limit_conn_log_level error;`                                  |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                         |

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

<a id="index-3"></a>

<a id="limit-conn-status"></a>

### limit_conn_status

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_status` код;   |
|------------------------------------------------------------------------------------------|----------------------------|
| По умолчанию                                                                             | `limit_conn_status 503;`   |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location     |

Позволяет переопределить код ответа, используемый при отклонении запросов.

<a id="index-4"></a>

<a id="limit-conn-zone"></a>

### limit_conn_zone

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_zone` ключ zone = название:размер;   |
|------------------------------------------------------------------------------------------|--------------------------------------------------|
| По умолчанию                                                                             | —                                                |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                             |

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

Пример использования:

```nginx
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 байта. При переполнении зоны в ответ на последующие запросы сервер будет возвращать [ошибку](#limit-conn-status).

<a id="built-in-variables-2"></a>

## Встроенные переменные

<a id="v-limit-conn-status"></a>

### `$limit_conn_status`

хранит результат ограничения числа соединений: PASSED, REJECTED или REJECTED_DRY_RUN
