<!-- review: finished -->

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

# Limit Conn

O módulo é usado para limitar o número de conexões por chave definida, em particular, o número de conexões de um único endereço IP.

Nem todas as conexões são contadas. Uma conexão é contada apenas se ela tiver uma requisição sendo processada pelo servidor e todo o cabeçalho da requisição já tiver sido lido.

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

## Exemplo de Configuração

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

    ...

    server {

        ...

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

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

## Diretivas

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

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

### limit_conn

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn` zone number;   |
|-------------------------------------------------------------------------------------------|-----------------------------|
| Padrão                                                                                    | —                           |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location      |

Define a zona de memória compartilhada e o número máximo permitido de conexões para um determinado valor de chave. Quando este limite é excedido, o servidor retornará o [erro](#limit-conn-status) em resposta a uma requisição. Por exemplo, as diretivas

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

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

permitem apenas uma conexão por endereço IP por vez.

#### NOTE
No HTTP/2 e HTTP/3, cada requisição simultânea é considerada uma conexão separada.

Pode haver várias diretivas `limit_conn`. Por exemplo, a seguinte configuração limitará o número de conexões ao servidor por IP do cliente e, ao mesmo tempo, o número total de conexões ao servidor virtual:

```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;
}
```

Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas `limit_conn` definidas no nível atual.

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

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

### limit_conn_dry_run

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_dry_run` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|--------------------------------------|
| Padrão                                                                                    | `limit_conn_dry_run off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location               |

Habilita o modo de execução a seco. Neste modo, o número de conexões não é limitado, porém, na [zona de memória compartilhada](#limit-conn-zone), o número de conexões excessivas é contabilizado normalmente.

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

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

### limit_conn_log_level

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_log_level` `info` | `notice` | `warn` | `error`;   |
|-------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| Padrão                                                                                    | `limit_conn_log_level error;`                                  |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location                                         |

Define o nível de log desejado para casos quando o servidor limita o número de conexões.

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

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

### limit_conn_status

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_status` code;   |
|-------------------------------------------------------------------------------------------|-----------------------------|
| Padrão                                                                                    | `limit_conn_status 503;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location      |

Define o código de status a ser retornado em resposta a requisições rejeitadas.

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

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

### limit_conn_zone

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_zone` key zone = name:size;   |
|-------------------------------------------------------------------------------------------|-------------------------------------------|
| Padrão                                                                                    | —                                         |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http                                      |

Define parâmetros para uma zona de memória compartilhada que manterá estados para várias chaves. Em particular, o estado inclui o número atual de conexões. A chave pode conter texto, variáveis e sua combinação. Requisições com valor de chave vazio não são contabilizadas.

Exemplo de uso:

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

Aqui, um endereço IP do cliente serve como chave. Note que ao invés de `$remote_addr`, a variável `$binary_remote_addr` é usada aqui.

O tamanho da variável `$remote_addr` pode variar de 7 a 15 bytes. O estado armazenado ocupa 32 ou 64 bytes de memória em plataformas de 32 bits e sempre 64 bytes em plataformas de 64 bits.

O tamanho da variável `$binary_remote_addr` é sempre 4 bytes para endereços IPv4 ou 16 bytes para endereços IPv6. O estado armazenado sempre ocupa 32 ou 64 bytes em plataformas de 32 bits e 64 bytes em plataformas de 64 bits.

Uma zona de um megabyte pode manter cerca de 32 mil estados de 32 bytes ou cerca de 16 mil estados de 64 bytes. Se o armazenamento da zona for esgotado, o servidor retornará o [erro](#limit-conn-status) para todas as requisições subsequentes.

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

## Variáveis Integradas

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

### `$limit_conn_status`

mantém o resultado da limitação do número de conexões: `PASSED`, `REJECTED`, ou `REJECTED_DRY_RUN`
