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.

Exemplo de Configuração#

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

    ...

    server {

        ...

        limit_conn           addr 1;
        limit_conn_log_level error;
    }
}

Diretivas#

limit_conn#

Sintaxe

limit_conn zone number;

Padrão

Contexto

stream, server

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 fechará a conexão. Por exemplo, as diretivas

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    ...
    limit_conn addr 1;
}

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

Quando várias diretivas limit_conn são especificadas, qualquer limite configurado será aplicado.

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

stream, server

Habilita o modo de execução simulada. 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

stream, server

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

limit_conn_zone#

Sintaxe

limit_conn_zone key zone = name:size;

Padrão

Contexto

stream

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 suas combinações. Conexõ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 é definido pela variável $binary_remote_addr.

O tamanho de $binary_remote_addr é 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 fechará a conexão.

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