# Cómo solucionar el error de Nginx, worker_connections exceed open file resource limit: 1024

- Link: https://binariocero.com/linux/como-solucionar-el-error-de-nginx-worker_connections-exceed-open-file-resource-limit-1024
- Published: 2025-09-04T13:42:01+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

En entornos de alta concurrencia, Nginx puede mostrar advertencias como:

    ```wp-block-code
    [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

 1. **`worker_connections` demasiado alto**
    En `nginx.conf` se configuró un número 
    elevado de conexiones simultáneas. Ejemplo problemático: `events { worker_connections
    32768; }`
 2. **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.
 3. **`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:

    ```wp-block-code
    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:

    ```wp-block-code
    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:

    ```wp-block-code
    sudo systemctl daemon-reload
    sudo systemctl restart nginx
    ```

### 3. Verificar límites aplicados

Ejecuta:

    ```wp-block-code
    # Ver límite de open files en proceso maestro de Nginx
    cat /proc/$(pgrep -o nginx)/limits | grep "open files"
    ```

Salida esperada:

    ```wp-block-code
    Max open files            200000                200000                files
    ```

También puedes validar la sintaxis de Nginx:

    ```wp-block-code
    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:

    ```wp-block-code
    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:

    ```wp-block-code
    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:

 1. Añadir `worker_rlimit_nofile` en `nginx.conf`.
 2. Elevar `LimitNOFILE` en systemd.
 3. Ajustar `worker_connections` a valores realistas para tu hardware.

Con estos cambios, Nginx podrá manejar conexiones concurrentes sin limitaciones 
artificiales impuestas por el sistema.
