Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero
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
fairrequiere 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-extrases el paquete más completo, ideal para administradores que necesitan módulos avanzados o de terceros.- El módulo
ngx_http_proxy_moduleviene habilitado por defecto ennginx-fullynginx-extras. nginx-fullynginx-extrasno pueden coexistir en el mismo sistema.- El uso del módulo
proxyes 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.