Las interfaces de programación de aplicaciones (APIs) son puentes cruciales que permiten que sus sistemas, aplicaciones y servicios interactúen entre sí. Sin embargo, las APIs expuestas públicamente o abiertas a redes internas pueden ser objeto de abusos. La limitación de solicitudes (rate limiting) es una técnica de control de tráfico que ayuda a proteger sus APIs regulando la cantidad de solicitudes que un usuario o dirección IP puede hacer en un período determinado.
Por Qué Utilizar Rate Limiting en APIs?
- Mitigación de ataques: La limitación de solicitudes (rate limiting) ayuda a reducir el impacto de ataques de denegación de servicio (DoS/DDoS) y los intentos de “fuerza bruta” de adivinar contraseñas.
- Gestión de recursos: Previene que usuarios individuales puedan saturar los recursos de su servidor, garantizando el rendimiento para todos.
- Control de acceso: Se puede usar para diferenciar niveles de acceso o aplicar modelos de pago en función del volumen de solicitudes.
Cómo Funciona la Limitación de Solicitudes con Nginx
Nginx utiliza un algoritmo “leaky bucket” (“balde con fugas”) para la limitación de solicitudes. Las solicitudes entrantes se manejan a una velocidad fija, y las solicitudes en exceso se colocan en un búfer. Las solicitudes se procesan en orden, y si el búfer se desborda, las nuevas solicitudes se descartan hasta que haya espacio disponible.
Configuración de Rate Limiting en Nginx
Siga estos pasos para configurar una limitación de solicitudes básica en Nginx:
- Defina el límite de solicitudes: Abra su archivo de configuración de Nginx (
/etc/nginx/nginx.conf
por lo general). Añada las siguientes directivas en el bloquehttp
:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
Esta configuración crea una zona llamada “mylimit” con un tamaño de 10 megabytes (suficiente para almacenar unas 160 mil direcciones IP), y limita las solicitudes a 10 por segundo.
- Aplique la restricción a una ubicación: Dentro del bloque
server
de su configuración de Nginx, añada:
location /api/ {
limit_req zone=mylimit;
}
Esto aplica la zona de limitación “mylimit” a las solicitudes dirigidas al endpoint /api/
.
- Respuesta a solicitudes excesivas: Defina cómo manejarlas (opcional):
limit_req_status 429; # Devolverá un error HTTP 429 (Too Many Requests)
- Pruebe y Reinicie Nginx
bash
sudo nginx -t # Verifica la configuración.
sudo systemctl restart nginx
Opciones Avanzadas
Nginx ofrece flexibilidad para personalizar el rate limiting:
- Directiva
burst
: Define un búfer temporal para absorber ráfagas de solicitudes por encima del límite establecido. - Directiva
nodelay
: Si se combina conburst
, evita retrasar las solicitudes que se encuentran dentro del límite más el tamaño del buffer (burst). - Claves alternativas: En lugar de usar solo la dirección IP, puede especificar claves más complejas usando variables de Nginx para una limitación más granular.
Servicios de Shape.host
Los Cloud VPS de Shape.host proporcionan una infraestructura sólida y escalable para la implementación de sus soluciones de Nginx. Su almacenamiento SSD de alto rendimiento y sus opciones de seguridad mejorada contribuyen a salvaguardar la disponibilidad y el rendimiento de sus APIs.