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.

Exemplo de Configuração#

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

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }

Diretivas#

limit_conn#

Sintaxe

limit_conn zone number;

Padrão

Contexto

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 em resposta a uma requisição. Por exemplo, as diretivas

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.

Nota

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:

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.

limit_conn_dry_run#

Sintaxe

limit_conn_dry_run on | off;

Padrão

limit_conn_dry_run off;

Contexto

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, o número de conexões excessivas é contabilizado normalmente.

limit_conn_log_level#

Sintaxe

limit_conn_log_level info | notice | warn | error;

Padrão

limit_conn_log_level error;

Contexto

http, server, location

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

limit_conn_status#

Sintaxe

limit_conn_status code;

Padrão

limit_conn_status 503;

Contexto

http, server, location

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

limit_conn_zone#

Sintaxe

limit_conn_zone key zone = name:size;

Padrão

Contexto

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:

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 para todas as requisições subsequentes.

Variáveis Integradas#

$limit_conn_status#

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