
Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero
En entornos de alta concurrencia, Nginx puede mostrar advertencias como:
[warn] 32768 worker_connections exceed open file resource limit: 1024
Este mensaje indica que la configuración de worker_connections
en nginx.conf
supera el límite de descriptores de archivo (open files) permitido por el sistema para el proceso de Nginx.
Cada conexión de cliente consume al menos un descriptor de archivo. Si Nginx intenta aceptar más de los permitidos por el sistema, puede provocar errores de conexión o advertencias.
Causas del error
worker_connections
demasiado alto
Ennginx.conf
se configuró un número elevado de conexiones simultáneas. Ejemplo problemático:events { worker_connections 32768; }
- Límite de archivos abiertos bajo en el sistema (
ulimit -n
)
Por defecto, muchos sistemas Linux establecen un límite de solo 1024 descriptores de archivo por proceso. worker_rlimit_nofile
no configurado
Sin esta directiva, Nginx no puede pedir al kernel aumentar el límite de open files para cada worker.
Solución paso a paso
1. Ajustar worker_rlimit_nofile
en Nginx
Edita /etc/nginx/nginx.conf
y añade la directiva en el bloque principal:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log warn;
include /etc/nginx/modules-enabled/*.conf;
# Elevar límite de descriptores de archivo por worker
worker_rlimit_nofile 131072;
events {
worker_connections 32768;
multi_accept on;
}
http {
# resto de tu configuración...
}
Nota: worker_rlimit_nofile
debe ser ≥ (worker_connections
× worker_processes
), con un margen adicional.
2. Configurar límites en systemd
Nginx se ejecuta como servicio, y ulimit
de la shell no basta. Crea un override para levantar el límite:
sudo mkdir -p /etc/systemd/system/nginx.service.d
sudo tee /etc/systemd/system/nginx.service.d/override.conf >/dev/null <<'EOF'
[Service]
LimitNOFILE=200000
EOF
Recarga systemd y reinicia Nginx:
sudo systemctl daemon-reload
sudo systemctl restart nginx
3. Verificar límites aplicados
Ejecuta:
# Ver límite de open files en proceso maestro de Nginx
cat /proc/$(pgrep -o nginx)/limits | grep "open files"
Salida esperada:
Max open files 200000 200000 files
También puedes validar la sintaxis de Nginx:
nginx -t
4. Ajustar configuración según recursos
En tu servidor (2 vCPU, 2 GB RAM), poner worker_connections 32768
puede ser excesivo.
Recomendación realista:
events {
worker_connections 8192;
multi_accept on;
}
worker_rlimit_nofile 65536;
Esto permite manejar unas 16.000 conexiones simultáneas (2 workers × 8192), mucho más acorde a tu hardware, evitando consumo excesivo de memoria.
Conclusión
El error:
worker_connections exceed open file resource limit: 1024
aparece porque Nginx intenta manejar más conexiones de las que el sistema permite.
La solución pasa por:
- Añadir
worker_rlimit_nofile
ennginx.conf
. - Elevar
LimitNOFILE
en systemd. - Ajustar
worker_connections
a valores realistas para tu hardware.
Con estos cambios, Nginx podrá manejar conexiones concurrentes sin limitaciones artificiales impuestas por el sistema.