Nginx permite configurar la limitación de conexiones y la limitación de tasa de peticiones para controlar la carga en el servidor y proteger la aplicación contra abusos, como ataques de denegación de servicio (DoS). Estas características son esenciales para garantizar un rendimiento óptimo y proteger el servidor de posibles ataques.
Para limitar el número de conexiones simultáneas en Nginx, se usa el módulo ngx_http_limit_conn_module
, que permite definir un límite de conexiones por clave (por ejemplo, por dirección IP del cliente).
1. Definir una zona de limitación de conexiones en el bloque http
:
http {
limit_conn_zone $binary_remote_addr zone=addr_limit:10m;
server {
listen 80;
server_name ejemplo.com;
location / {
limit_conn addr_limit 10; # Máximo 10 conexiones simultáneas por IP
proxy_pass http://backend;
}
}
}
En este ejemplo:
limit_conn_zone $binary_remote_addr zone=addr_limit:10m;
: Define una zona de 10 MB para almacenar las conexiones activas por dirección IP.
limit_conn addr_limit 10;
: Permite un máximo de 10 conexiones simultáneas por IP en la ubicación especificada.
Parámetro | Descripción |
---|---|
limit_conn_zone
|
Define la variable (clave) y el tamaño de la zona compartida para almacenar el estado de conexión. |
limit_conn
|
Establece el límite de conexiones por clave en una ubicación o bloque específico. |
La limitación de tasa de peticiones en Nginx se configura con el módulo ngx_http_limit_req_module
, que permite definir la cantidad máxima de solicitudes permitidas en un intervalo de tiempo específico.
1. Definir una zona de limitación de tasa en el bloque http
:
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
server {
listen 80;
server_name ejemplo.com;
location / {
limit_req zone=req_limit burst=10 nodelay; # Máximo de 5 solicitudes por segundo
proxy_pass http://backend;
}
}
}
En este ejemplo:
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
: Crea una zona de 10 MB para almacenar el estado de cada IP con una tasa máxima de 5 solicitudes por segundo.
limit_req zone=req_limit burst=10 nodelay;
: Permite una ráfaga de hasta 10 solicitudes en casos de picos de tráfico. nodelay
permite procesar las solicitudes de la ráfaga sin espera.
Parámetro | Descripción |
---|---|
limit_req_zone
|
Define la variable y el tamaño de la zona compartida para almacenar el estado de las solicitudes. |
rate
|
Tasa de solicitudes permitidas (por ejemplo, 5r/s para 5 solicitudes por segundo).
|
limit_req
|
Configura el límite de solicitudes y opciones de ráfaga para una ubicación o bloque. |
burst
|
Número de solicitudes adicionales permitidas en caso de picos de tráfico (por encima de la tasa). |
nodelay
|
Procesa las solicitudes de ráfaga sin tiempos de espera, permitiendo su aceptación inmediata. |
1. Configuración de limitación de conexiones y tasa en una ubicación específica:
server {
listen 80;
server_name ejemplo.com;
location /api/ {
limit_conn addr_limit 5; # Máximo 5 conexiones por IP
limit_req zone=req_limit burst=15; # Máximo de 5 solicitudes por segundo con 15 solicitudes en ráfaga
proxy_pass http://backend;
}
}
2. Configurar diferentes tasas de solicitud para diferentes ubicaciones:
http {
limit_req_zone $binary_remote_addr zone=public_limit:10m rate=1r/s;
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
server_name ejemplo.com;
location /public/ {
limit_req zone=public_limit burst=5 nodelay;
proxy_pass http://backend_public;
}
location /api/ {
limit_req zone=api_limit burst=20;
proxy_pass http://backend_api;
}
}
}
3. Responder con un código personalizado cuando se exceden los límites:
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
server {
listen 80;
server_name ejemplo.com;
location / {
limit_req zone=req_limit burst=10;
limit_req_status 429; # Responde con el código 429 (Too Many Requests) cuando se excede el límite
proxy_pass http://backend;
}
}
}
En este ejemplo:
limit_req_status 429;
: Define el código de respuesta 429 Too Many Requests
cuando se excede el límite de solicitudes.
Para más detalles sobre la configuración de limitación de conexiones y tasa de peticiones en Nginx, consulta la documentación oficial de Nginx.
Jorge García
Fullstack developer