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
- Limitación de Solicitudes (Request Limiting): Controla el número de solicitudes permitidas por unidad de tiempo.
- 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
.
$binary_remote_addr
: Utiliza la dirección IP del cliente para la limitación.zone=mylimit:10m
: Define una zona de memoria compartida llamadamylimit
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
.
zone=mylimit
: Aplica la zona de limitaciónmylimit
.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
.
zone=addr:10m
: Define una zona de memoria compartida llamadaaddr
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
.
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
- Define una zona de limitación de solicitudes que permita 2 solicitudes por segundo.
- 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
- Define una zona de limitación de conexiones que permita un máximo de 5 conexiones simultáneas por dirección IP.
- 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
- 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
ylimit_conn
según sea necesario. - 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.
Curso de NGINX
Módulo 1: Introducción a NGINX
Módulo 2: NGINX como Servidor Web
- Sirviendo Contenido Estático
- Listados de Directorios
- Páginas de Error Personalizadas
- Registro y Formatos de Registro
Módulo 3: NGINX como Proxy Inverso
- Introducción al Proxy Inverso
- Configurando un Proxy Inverso
- Balanceo de Carga
- Verificaciones de Salud