La limitación de la tasa de solicitudes en Nginx es una función integrada que controla cuántas solicitudes HTTP puede realizar un cliente durante un periodo determinado. Puede reducir el tráfico abusivo dirigido a API, páginas de inicio de sesión y aplicaciones que consumen muchos recursos sin necesidad de instalar software adicional.
En esta guía, configurarás límites de solicitudes en Nginx, los probarás de forma segura y activarás la protección en un servidor Ubuntu.
¿Cómo funciona la limitación de la tasa de solicitudes en Nginx?
Nginx utiliza el módulo limit_req para hacer un seguimiento de las solicitudes entrantes, normalmente según la dirección IP del cliente.
Por ejemplo, puedes configurar un límite medio de cinco solicitudes por segundo y permitir breves ráfagas de tráfico. Las solicitudes que superen la ráfaga permitida podrán rechazarse.
Esto ayuda a evitar que un exceso de solicitudes sature tu aplicación.
Nota: La limitación de la tasa de solicitudes ayuda a mitigar ciertas avalanchas de solicitudes HTTP de capa 7. No puede detener ataques DDoS de gran escala a nivel de red que saturen tu conexión.

Requisitos previos
Necesitarás un servidor Ubuntu con Nginx instalado, acceso SSH con privilegios sudo y un sitio web o una aplicación existente.
Si vas a configurar Nginx por primera vez, sigue nuestro tutorial sobre el proxy inverso de Nginx.
Antes de hacer cambios, crea una copia de seguridad de la configuración actual de tu sitio web.
Paso 1: Define una zona de limitación de la tasa de solicitudes
Conéctate a tu servidor mediante SSH.
En una instalación estándar de Nginx en Ubuntu, crea un archivo de configuración nuevo:
sudo nano /etc/nginx/conf.d/rate-limit.conf
Añade:
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
Esta configuración utiliza la dirección IP del cliente para hacer un seguimiento de las solicitudes, asigna 10 MB a los datos de seguimiento y establece un límite medio de cinco solicitudes por segundo y por IP.
La directiva limit_req_zone debe situarse dentro del contexto http de Nginx. La configuración estándar de Ubuntu incluye allí los archivos de conf.d.
Guarda el archivo.
Paso 2: Activa la limitación de la tasa de solicitudes para tu sitio web
Abre la configuración actual de tu sitio web en Nginx:
sudo nano /etc/nginx/sites-available/app.example.com
Sustituye el nombre del archivo por el de tu configuración.
Para una aplicación HTTP que se ejecuta en el puerto 3000, un endpoint de API protegido podría tener este aspecto:
location /api/ {
limit_req zone=perip burst=10 nodelay;
limit_req_status 429;
limit_req_dry_run on;
proxy_pass http://127.0.0.1:3000;
}
Estas son las funciones de las directivas más importantes:
limit_req: Aplica el límite definido anteriormente.burst=10: Permite una breve ráfaga de solicitudes por encima del límite.nodelay: Procesa de inmediato las solicitudes permitidas durante la ráfaga.limit_req_status 429: Devuelve HTTP 429 cuando se rechazan solicitudes.limit_req_dry_run on: Registra las solicitudes excesivas sin bloquearlas.
Importante: Añade estas directivas de limitación de la tasa de solicitudes al bloque location existente que corresponda. No crees bloques de ubicación duplicados ni sustituyas la configuración actual de tu servidor backend.
Los valores mostrados son ejemplos. Elige los límites según los patrones habituales de solicitudes de tu aplicación.
Paso 3: Valida la configuración de Nginx
Comprueba la configuración:
sudo nginx -t
Si la prueba se completa correctamente, recarga Nginx:
sudo systemctl reload nginx
Si aparece un error, corrígelo antes de recargar.
Paso 4: Prueba el límite de solicitudes
Como el modo de simulación está activado, las solicitudes todavía no se rechazarán.
Supervisa el registro de errores de Nginx:
sudo tail -f /var/log/nginx/error.log
Desde otro terminal, envía una pequeña ráfaga de solicitudes de prueba a un endpoint que controles:
for i in $(seq 1 15); do
curl -s -o /dev/null -w "%{http_code}\n" \
https://app.example.com/api/health
done
Sustituye la URL por la de un endpoint operativo de tu propia aplicación de prueba o preproducción.
Si las solicitudes superan el límite, Nginx debería registrar mensajes que contengan limiting requests, dry run en su registro de errores.
Tu aplicación debería seguir devolviendo sus respuestas habituales porque el bloqueo no está activado.
Paso 5: Activa la limitación de la tasa de solicitudes
Una vez que hayas revisado los resultados y confirmado que los límites son adecuados, elimina esta directiva del bloque de ubicación protegido:
limit_req_dry_run on;
Valida la configuración y vuelve a cargar Nginx:
sudo nginx -t
sudo systemctl reload nginx
Las solicitudes excesivas ya pueden recibir la respuesta HTTP 429 Too Many Requests.
Repite una prueba controlada y comprueba los códigos de respuesta. Los resultados exactos dependen de los intervalos entre solicitudes y de los límites que hayas configurado.
Cómo deshacer los cambios
Si los usuarios legítimos se ven afectados, restaura:
limit_req_dry_run on;
Valida la configuración y recarga Nginx. Así volverás al modo de supervisión sin rechazar solicitudes.
Después podrás ajustar los límites según el tráfico real.
Importante: Nginx detrás de Cloudflare u otra CDN
Cuando Nginx está detrás de un proxy inverso, la IP del cliente que ve Nginx puede pertenecer al proxy y no al visitante original.
Aplicar límites por IP sin corregir esto puede agrupar a usuarios que no tienen relación entre sí.
Antes de aplicar límites por cliente, configura el tratamiento de las IP de cliente de confianza mediante el módulo Real IP de Nginx y los rangos de IP documentados por tu proveedor de proxy.
Nunca confíes en cabeceras IP proporcionadas por cualquier visitante.
¿Sustituye la limitación de la tasa de solicitudes en Nginx a la protección DDoS?
No. Nginx puede limitar el exceso de solicitudes HTTP que llegan a tu aplicación, pero no puede filtrar el tráfico que ya ha saturado la conexión de red de tu servidor con el proveedor.
Para obtener una protección más amplia, combina controles a nivel de aplicación con medidas de mitigación a nivel del servicio de alojamiento.
Nuestra guía de protección DDoS explica cómo se complementan las defensas a nivel de red y de aplicación.
Preguntas frecuentes
Sí. Nginx Open Source incluye el módulo limit_req.
Sí. Una configuración demasiado estricta puede rechazar solicitudes legítimas, especialmente cuando varios usuarios comparten una dirección IP. Haz pruebas en modo de simulación antes de activar el bloqueo.
Sí. Resulta especialmente útil para controlar el exceso de solicitudes a endpoints de API y otras rutas de aplicaciones que consumen muchos recursos.
Conclusión
Nginx incorpora una función de limitación de la tasa de solicitudes que puede ayudar a reducir el tráfico HTTP abusivo sin necesidad de instalar software adicional.
Configura el límite de solicitudes, pruébalo en modo de simulación y activa el bloqueo solo después de revisar los resultados.
Para proteger el servidor de forma integral, combina la limitación de la tasa de solicitudes con medidas adecuadas de mitigación DDoS en la infraestructura de red.