Limit Conn#

El módulo se utiliza para limitar el número de conexiones según la clave definida, en particular, el número de conexiones desde una única dirección IP.

No se cuentan todas las conexiones. Una conexión se cuenta solo si tiene una solicitud que está siendo procesada por el servidor y la cabecera completa de la solicitud ya ha sido leída.

Ejemplo de configuración#

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

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }

Directivas#

limit_conn#

Syntax

limit_conn zone number;

Predeterminado

Context

http, server, location

Establece la zona de memoria compartida y el número máximo permitido de conexiones para un valor de clave determinado. Cuando se excede este límite, el servidor devolverá el error en respuesta a una solicitud. Por ejemplo, las directivas

limit_conn_zone $binary_remote_addr zone=addr:10m;

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

Estas directivas permiten solo una conexión por dirección IP a la vez.

Nota

En HTTP/2 y HTTP/3, cada solicitud concurrente se considera una conexión separada.

Puede haber varias directivas limit_conn. Por ejemplo, la siguiente configuración limitará el número de conexiones al servidor por IP de cliente y, al mismo tiempo, el número total de conexiones al 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;
}

Estas directivas se heredan del nivel de configuración anterior si y solo si no hay directivas limit_conn definidas en el nivel actual.

limit_conn_dry_run#

Syntax

limit_conn_dry_run on | off;

Predeterminado

limit_conn_dry_run off;

Context

http, server, location

Habilita el modo de prueba en seco. En este modo, el número de conexiones no está limitado, sin embargo, en la zona de memoria compartida, el número de conexiones excesivas se contabiliza como de costumbre.

limit_conn_log_level#

Syntax

limit_conn_log_level info | notice | warn | error;

Predeterminado

limit_conn_log_level error;

Context

http, server, location

Establece el nivel de registro deseado para los casos en que el servidor limita el número de conexiones.

limit_conn_status#

Syntax

limit_conn_status code;

Predeterminado

limit_conn_status 503;

Context

http, server, location

Establece el código de estado que se devolverá en respuesta a las solicitudes rechazadas.

limit_conn_zone#

Syntax

limit_conn_zone key zone = name:size;

Predeterminado

Context

http

Establece parámetros para una zona de memoria compartida que mantendrá estados para varias claves. En particular, el estado incluye el número actual de conexiones. La clave puede contener texto, variables y su combinación. Las solicitudes con un valor de clave vacío no se contabilizan.

Ejemplo de uso:

limit_conn_zone $binary_remote_addr zone=addr:10m;

Aquí, la dirección IP del cliente sirve como clave. Tenga en cuenta que en lugar de $remote_addr, aquí se utiliza la variable $binary_remote_addr.

El tamaño de la variable $remote_addr puede variar de 7 a 15 bytes. El estado almacenado ocupa 32 o 64 bytes de memoria en plataformas de 32 bits y siempre 64 bytes en plataformas de 64 bits.

El tamaño de la variable $binary_remote_addr es siempre 4 bytes para direcciones IPv4 o 16 bytes para direcciones IPv6. El estado almacenado siempre ocupa 32 o 64 bytes en plataformas de 32 bits y 64 bytes en plataformas de 64 bits.

Una zona de un megabyte puede mantener aproximadamente 32 mil estados de 32 bytes o aproximadamente 16 mil estados de 64 bytes. Si el almacenamiento de la zona se agota, el servidor devolverá el error a todas las solicitudes posteriores.

Variables incorporadas#

$limit_conn_status#

mantiene el resultado de limitar el número de conexiones: PASSED, REJECTED, o REJECTED_DRY_RUN