Rate limiting en Nginx
Cómo limitar conexiones, solicitudes y velocidad de respuesta en Nginx.
Nginx incluye herramientas integradas sólidas para mantener el tráfico bajo control. Ya sea que estés gestionando clientes abusivos, protegiendo un endpoint de descarga o simplemente evitando que un usuario acapare todo el ancho de banda — estas directivas te tienen cubierto. Todo se configura en el archivo de configuración de Nginx.
1. Limitación del número de conexiones simultáneas
Primero, define una zona en memoria compartida en el bloque http usando limit_conn_zone. Aquí es donde Nginx rastrea el estado de las conexiones por IP de cliente:
http {
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
}
Luego, dentro del bloque location correspondiente, aplica el límite referenciando esa zona y estableciendo el número máximo de conexiones simultáneas por IP:
location /download/ {
limit_conn conn_limit_per_ip 5;
}
2. Limitación de la tasa de peticiones
En el bloque http, usa limit_req_zone para definir una zona y establecer una tasa de peticiones permitida:
http {
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
}
En el bloque location, referencia la zona y define un margen de burst — cuántas peticiones adicionales pueden encolarse antes de que Nginx empiece a rechazarlas:
location /download/ {
limit_req zone=req_limit_per_ip burst=10;
}
Nuestros servicios y productos
3. Limitación de la velocidad de transferencia de respuestas
La directiva limit_rate limita la velocidad de respuesta en bytes por segundo por conexión. Ten en cuenta que si un cliente abre dos conexiones simultáneamente, su throughput efectivo será el doble del límite.
location /download/ {
limit_rate 50k;
}
Si prefieres dejar pasar el bloque inicial de datos a plena velocidad antes de aplicar la limitación, combínala con limit_rate_after:
location /download/ {
limit_rate_after 1m;
limit_rate 50k;
}
En este ejemplo, el primer megabyte se sirve a plena velocidad — después, Nginx aplica el límite de 50 KB/s.
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!