# Comparativa y Uso del Módulo Proxy en Nginx: nginx, nginx-full, nginx-extras y más

- Link: https://binariocero.com/articulos/comparativa-y-uso-del-modulo-proxy-en-nginx-nginx-nginx-full-nginx-extras-y-mas
- Published: 2025-07-14T22:53:00+02:00
- Author: Juan José Fernández Durán

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

**Nginx** es uno de los servidores web y proxies inversos más utilizados del mundo
por su rendimiento, eficiencia y modularidad. En distribuciones como **Debian** 
y **Ubuntu**, existen diferentes variantes del paquete Nginx, como `nginx`, `nginx-
full` y `nginx-extras`, cada una con su propósito. Este artículo explica sus diferencias,
compatibilidades y cómo usar el **módulo de proxy** (`ngx_http_proxy_module`), fundamental
para arquitecturas modernas como balanceadores de carga o gateways.

## Diferencias entre los paquetes `nginx`, `nginx-common`, `nginx-full` y `nginx-extras`

| Paquete | Descripción | Módulos incluidos | 
| `nginx` | Metapaquete que instala una de las variantes completas de Nginx. | Depende del sistema, normalmente `full` | 
| `nginx-common` | Archivos compartidos: configuración, scripts, documentación. | — | 
| `nginx-full` | Versión estándar con todos los módulos oficiales de Nginx. | Solo módulos oficiales | 
| `nginx-extras` | Versión extendida con módulos oficiales y de terceros (más funcionalidades) | Oficiales + módulos de terceros |

### ¿Pueden convivir `nginx-full` y `nginx-extras`?

No. Ambos paquetes **entran en conflicto porque proporcionan el mismo binario principal**(`/
usr/sbin/nginx`). Solo puedes tener uno instalado al mismo tiempo. Sin embargo, 
ambos dependen de `nginx-common`, que sí es compartido y puede coexistir con cualquiera
de las variantes.

## ¿Cuál es el más completo?

**`nginx-extras` es el paquete más completo**, ya que incluye todo lo que ofrece`
nginx-full` y además módulos de terceros que extienden las capacidades de Nginx.

### Módulos adicionales que solo tiene `nginx-extras`:

 * `headers-more`: permite modificar o eliminar cabeceras HTTP.
 * `echo`: útil para testing y debugging.
 * `auth-pam`: soporte de autenticación PAM.
 * `upload-progress`: seguimiento de subidas.
 * `upstream-fair`: balanceo de carga justo.
 * `http-dav-ext`: soporte extendido de WebDAV.
 * `set-misc` + `ndk`: utilidades avanzadas para manipulación de variables.

Ideal para entornos donde se necesite alta flexibilidad o funcionalidad avanzada
sin recompilar desde el código fuente.

## Verificación del módulo `proxy` en Nginx

El módulo de proxy (`ngx_http_proxy_module`) está incluido **por defecto** tanto
en `nginx-full` como en `nginx-extras`.

Puedes verificarlo con:

    ```wp-block-preformatted
    nginx -V 2>&1 | grep --color=auto http_proxy_module
    ```

Si el módulo aparece en la salida, está disponible y puedes usarlo directamente 
en tus configuraciones.

## Cómo usar el módulo `proxy` en Nginx

Este módulo permite a Nginx funcionar como **proxy inverso**, redirigiendo las peticiones
entrantes a uno o más servidores backend.

### Ejemplo básico de configuración:

    ```wp-block-preformatted
    server {    listen 80;    server_name ejemplo.com;    location / {        proxy_pass http://127.0.0.1:3000;  # Backend local        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;    }}
    ```

Este bloque reenvía todas las peticiones recibidas en `ejemplo.com` hacia el backend
que escucha en `127.0.0.1:3000`.

### Recarga de configuración

Tras realizar los cambios:

    ```wp-block-preformatted
    sudo nginx -t           # Verifica la sintaxissudo systemctl reload nginx  # Aplica los cambios sin reiniciar
    ```

## Cache de contenido con `proxy_cache`

Nginx permite cachear las respuestas del backend para mejorar el rendimiento y reducir
la carga:

    ```wp-block-preformatted
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60m use_temp_path=off;server {    location / {        proxy_pass http://backend;        proxy_cache my_cache;        proxy_cache_valid 200 302 10m;        proxy_cache_valid 404 1m;    }}
    ```

 * `proxy_cache_path`: define dónde y cómo se guarda la caché.
 * `proxy_cache`: activa la caché para esta ubicación.
 * `proxy_cache_valid`: define la duración según el código HTTP.

## Balanceo de carga con `upstream`

Puedes distribuir las peticiones entre múltiples servidores backend:

    ```wp-block-preformatted
    upstream backend {    server 192.168.0.101;    server 192.168.0.102;}server {    location / {        proxy_pass http://backend;    }}
    ```

Para balanceos más avanzados (round robin, least connections, fair), se puede usar:

    ```wp-block-preformatted
    upstream backend {    least_conn;    server 192.168.0.101;    server 192.168.0.102;}
    ```

> El modo `fair` requiere el módulo `upstream-fair`, disponible en `nginx-extras`.

## Control de cabeceras HTTP

Con `proxy_set_header` puedes modificar cabeceras hacia el backend:

    ```wp-block-preformatted
    proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
    ```

Con `headers-more` (solo en `nginx-extras`) puedes **eliminar o sobreescribir cabeceras**
en las respuestas:

    ```wp-block-preformatted
    more_clear_headers 'Server';more_set_headers 'X-Powered-By: Nginx';
    ```

Esto es útil para mejorar la privacidad o para cumplir con políticas de seguridad.

## Seguridad adicional con `proxy_hide_header`

Puedes ocultar cabeceras del backend que no quieres que lleguen al cliente:

    ```wp-block-preformatted
    proxy_hide_header X-Powered-By;proxy_hide_header Server;
    ```

También puedes usar `add_header` para añadir otras cabeceras de seguridad como `
Strict-Transport-Security`, `Content-Security-Policy`, etc.

## Conclusión

 * `nginx-extras` es el paquete más completo, ideal para administradores que necesitan
   módulos avanzados o de terceros.
 * El módulo `ngx_http_proxy_module` viene habilitado por defecto en `nginx-full`
   y `nginx-extras`.
 * `nginx-full` y `nginx-extras` **no pueden coexistir** en el mismo sistema.
 * El uso del módulo `proxy` es directo: no se activa, se usa mediante configuración(`
   proxy_pass`).
 * Se puede ampliar con funcionalidades como `proxy_cache`, balanceo de carga y 
   control de cabeceras HTTP.
