# Cómo Detectar y Optimizar las Conexiones en Tiempo Real en Nginx

- Link: https://binariocero.com/linux/como-detectar-y-optimizar-las-conexiones-en-tiempo-real-en-nginx
- Published: 2026-01-15T13:22:55+01:00
- Author: Juan José Fernández Durán

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

## Ver conexiones activas en tiempo real (stub_status)

Si tienes `stub_status` habilitado:

    ```wp-block-code
    curl http://127.0.0.1/nginx_status
    ```

Salida típica:

    ```wp-block-code
    Active connections: 512
    server accepts handled requests
     102345 102345 203456
    Reading: 10 Writing: 200 Waiting: 302
    ```

### Qué mirar aquí

 * **Active connections** → conexiones totales actuales
 * **Reading/Writing/Waiting**:
    - `Writing` alto = backend lento o clientes lentos
    - `Waiting` alto = keepalive reteniendo conexiones

Si _Active connections_ ≈ límite configurado → **estás al borde**

## Ver límite real de conexiones de Nginx

### a) Worker connections

    ```wp-block-code
    nginx -T | grep worker_connections
    ```

Ejemplo:

    ```wp-block-code
    worker_connections 1024;
    ```

### b) Workers activos

    ```wp-block-code
    nginx -T | grep worker_processes
    ```

Ejemplo:

    ```wp-block-code
    worker_processes auto;
    ```

### Conexiones máximas teóricas

    ```wp-block-code
    worker_processes × worker_connections
    ```

Ejemplo:

    ```wp-block-code
    4 workers × 1024 = 4096 conexiones
    ```

OJO: **no todas son para clientes**
También cuentan:

 * Conexiones a upstreams
 * Conexiones keepalive
 * Proxy_pass

## Ver errores claros de saturación

Busca esto en logs:

    ```wp-block-code
    grep -i "worker_connections" /var/log/nginx/error.log
    ```

Mensajes típicos:

    ```wp-block-code
    [error] 1024#1024: *12345 worker_connections are not enough
    ```

**Esto confirma que Nginx ha llegado al límite**

## Ver conexiones TCP reales del sistema

    ```wp-block-code
    ss -s
    ```

O solo Nginx:

    ```wp-block-code
    ss -ant | grep :80 | wc -l
    ss -ant | grep :443 | wc -l
    ```

Estados importantes:

 * `ESTAB` → conexiones activas
 * `SYN_RECV` alto → posible saturación o ataque
 * `TIME_WAIT` alto → tuning TCP pendiente

## Comprobar límites del sistema (MUY IMPORTANTE)

Aunque Nginx esté bien configurado, Linux puede limitarlo.

### a) File descriptors

    ```wp-block-code
    ulimit -n
    ```

Nginx necesita **al menos**:

    ```wp-block-code
    worker_processes × worker_connections × 2
    ```

### b) Ver límite real del proceso

    ```wp-block-code
    cat /proc/$(pidof nginx | awk '{print $1}')/limits
    ```

Busca:

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

## Síntomas claros de que Nginx está al límite

 * Respuestas **503 / 504**
 * Latencia alta sin CPU alta
 * Logs con:
    - `worker_connections are not enough`
    - `connect() failed (24: Too many open files)`
 * Muchas conexiones en `Waiting`
 * `SYN_RECV` creciendo

## Comprobación rápida (checklist express)

    ```wp-block-code
    # Conexiones activas
    curl localhost/nginx_status

    # Límites
    nginx -T | grep worker_connections
    ulimit -n

    # Errores
    grep -i "not enough" /var/log/nginx/error.log
    ```

## ¿Qué se suele hacer si está al límite?

 * Aumentar:
    - `worker_connections`
    - `worker_rlimit_nofile`
    - `ulimit -n`
 * Reducir:
    - `keepalive_timeout`
 * Activar:
    - Cache (si no usas proxy cache)
    - HTTP/2 o HTTP/3
 * Revisar backend (Apache / PHP-FPM)
