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:
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:
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:
sudo nginx -t # Verifica la sintaxis
sudo 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:
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:
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:
upstream backend {
least_conn;
server 192.168.0.101;
server 192.168.0.102;
}
El modo
fair
requiere el móduloupstream-fair
, disponible ennginx-extras
.
Control de cabeceras HTTP
Con proxy_set_header
puedes modificar cabeceras hacia el backend:
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:
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:
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 ennginx-full
ynginx-extras
. nginx-full
ynginx-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.