Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Cómo configurar la limitación de la tasa de solicitudes en Nginx sobre Ubuntu

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.

cómo configurar la limitación de la tasa de solicitudes en Nginx

Requisitos previos

Necesitarás un servidor Ubuntu con Nginx instalado, acceso SSH con privilegios sudo y un sitio web o una aplicación existente.

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.

Preguntas frecuentes

¿Es gratuita la limitación de la tasa de solicitudes en Nginx?

Sí. Nginx Open Source incluye el módulo limit_req.

¿Puede la limitación de la tasa de solicitudes en Nginx bloquear a visitantes legítimos?

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.

¿Funciona la limitación de la tasa de solicitudes en Nginx para las API?

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.

Table of Content

Un proxy inverso de Nginx recibe las solicitudes de los visitantes de un sitio web

Un error 502 Bad Gateway en Nginx suele significar que Nginx no ha podido recibir

El error 504 Gateway Timeout se produce cuando un servidor que actúa como puerta de

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Scroll al inicio