La limitación de tasa (rate limiting) es una técnica utilizada para controlar la cantidad de solicitudes que un servidor puede recibir en un período de tiempo determinado. Esto es crucial para proteger tu servidor de sobrecargas y ataques de denegación de servicio (DoS). En NGINX, la limitación de tasa se puede configurar utilizando los módulos ngx_http_limit_req_module y ngx_http_limit_conn_module.

Conceptos Clave

  1. Limitación de Solicitudes (Request Limiting): Controla el número de solicitudes permitidas por unidad de tiempo.
  2. Limitación de Conexiones (Connection Limiting): Controla el número de conexiones simultáneas permitidas.

Configuración de Limitación de Solicitudes

Paso 1: Habilitar el Módulo de Limitación de Solicitudes

El módulo ngx_http_limit_req_module debe estar habilitado en tu instalación de NGINX. La mayoría de las distribuciones de NGINX lo tienen habilitado por defecto.

Paso 2: Definir una Zona de Limitación

Primero, define una zona de limitación en el contexto http de tu archivo de configuración nginx.conf.

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
    ...
}
  • $binary_remote_addr: Utiliza la dirección IP del cliente para la limitación.
  • zone=mylimit:10m: Define una zona de memoria compartida llamada mylimit con un tamaño de 10 MB.
  • rate=1r/s: Limita la tasa a 1 solicitud por segundo.

Paso 3: Aplicar la Zona de Limitación a una Ubicación

Aplica la zona de limitación a una ubicación específica en el contexto server o location.

server {
    ...
    location / {
        limit_req zone=mylimit burst=5 nodelay;
        ...
    }
}
  • zone=mylimit: Aplica la zona de limitación mylimit.
  • burst=5: Permite un "estallido" de hasta 5 solicitudes adicionales.
  • nodelay: Procesa las solicitudes adicionales inmediatamente en lugar de retrasarlas.

Ejemplo Completo

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_req zone=mylimit burst=5 nodelay;
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

Configuración de Limitación de Conexiones

Paso 1: Habilitar el Módulo de Limitación de Conexiones

El módulo ngx_http_limit_conn_module debe estar habilitado en tu instalación de NGINX.

Paso 2: Definir una Zona de Limitación de Conexiones

Define una zona de limitación de conexiones en el contexto http.

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
}
  • zone=addr:10m: Define una zona de memoria compartida llamada addr con un tamaño de 10 MB.

Paso 3: Aplicar la Zona de Limitación de Conexiones

Aplica la zona de limitación de conexiones en el contexto server o location.

server {
    ...
    location / {
        limit_conn addr 10;
        ...
    }
}
  • limit_conn addr 10: Limita el número de conexiones simultáneas a 10.

Ejemplo Completo

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

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_conn addr 10;
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

Ejercicios Prácticos

Ejercicio 1: Configurar Limitación de Solicitudes

  1. Define una zona de limitación de solicitudes que permita 2 solicitudes por segundo.
  2. Aplica esta zona a una ubicación específica y permite un estallido de hasta 3 solicitudes adicionales.

Solución:

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_req zone=mylimit burst=3 nodelay;
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

Ejercicio 2: Configurar Limitación de Conexiones

  1. Define una zona de limitación de conexiones que permita un máximo de 5 conexiones simultáneas por dirección IP.
  2. Aplica esta zona a una ubicación específica.

Solución:

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

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_conn addr 5;
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

Errores Comunes y Consejos

  1. Error: "503 Service Temporarily Unavailable": Esto puede ocurrir si la tasa de solicitudes o el número de conexiones excede los límites configurados. Ajusta los parámetros rate, burst y limit_conn según sea necesario.
  2. Consejo: Monitorea los registros de NGINX para identificar patrones de tráfico y ajustar las configuraciones de limitación de tasa de manera óptima.

Conclusión

La limitación de tasa es una herramienta poderosa para proteger tu servidor NGINX de sobrecargas y ataques. Al configurar adecuadamente la limitación de solicitudes y conexiones, puedes asegurar un rendimiento estable y seguro para tu aplicación web. En el próximo tema, exploraremos la configuración SSL/TLS para asegurar las comunicaciones en tu servidor NGINX.

© Copyright 2024. Todos los derechos reservados