¿Necesitas exponer tus servicios web de forma segura sin complicarte con configuraciones manuales de Nginx? Nginx Proxy Manager Docker Compose es la solución perfecta para gestionar múltiples dominios, certificados SSL automáticos y proxies inversos desde una interfaz web intuitiva. En esta guía te mostraré cómo instalarlo en minutos y configurarlo sin necesidad de conocimientos avanzados de servidores.
Qué es Nginx Proxy Manager Docker Compose
Nginx Proxy Manager Docker Compose es una herramienta open-source que simplifica la gestión de proxies inversos mediante una interfaz web moderna. En lugar de editar archivos de configuración complejos, puedes crear y administrar hosts, redireccionamientos y certificados SSL con solo unos clics.
Este gestor está desarrollado sobre Nginx, el servidor web más utilizado del mundo, pero elimina toda la complejidad técnica. Es perfecto para homelabs, servidores domésticos o pequeños proyectos empresariales que necesitan una solución profesional sin dedicar horas a la configuración manual.
Con más de 30,000 estrellas en GitHub, esta aplicación se ha convertido en el estándar de facto para gestionar proxies inversos en entornos Docker. La comunidad activa contribuye constantemente con mejoras y mantiene una documentación exhaustiva.
La arquitectura basada en contenedores Docker permite desplegar el servicio en cuestión de minutos, independientemente del sistema operativo que uses. Ya sea Linux, Windows con WSL2 o macOS, podrás tener tu gestor de proxies funcionando rápidamente.
Por qué usar Nginx Proxy Manager Docker Compose en tu homelab
Los entusiastas del homelab y administradores de sistemas enfrentan constantemente el desafío de exponer múltiples servicios web de forma segura. Tradicionalmente, esto requería dominar la sintaxis compleja de Nginx, gestionar manualmente certificados SSL y mantener archivos de configuración dispersos.
Con nginx proxy manager docker compose, todos estos obstáculos desaparecen. La interfaz gráfica permite a usuarios sin experiencia en administración de servidores configurar proxies inversos profesionales en minutos. Esto significa que puedes concentrarte en desarrollar y usar tus aplicaciones, en lugar de perder tiempo con configuraciones de infraestructura.
Además, la integración con Let’s Encrypt elimina los costos asociados a certificados SSL comerciales. Los certificados se renuevan automáticamente cada 90 días, garantizando que tus servicios siempre estén protegidos sin intervención manual.
Ventajas principales de Nginx Proxy Manager Docker Compose
La implementación mediante contenedores Docker ofrece múltiples beneficios que hacen de esta solución una opción ideal:
- Certificados SSL gratuitos y automáticos: Integración nativa con Let’s Encrypt que renueva automáticamente los certificados sin intervención manual. Olvídate de preocuparte por fechas de caducidad.
- Interfaz gráfica elegante y moderna: Basada en el framework Tabler, permite gestionar todo desde el navegador. La experiencia de usuario está cuidadosamente diseñada para ser intuitiva.
- Sin conocimientos previos de Nginx: No necesitas saber configurar Nginx manualmente para crear dominios y redireccionamientos. La curva de aprendizaje es prácticamente inexistente.
- Control de acceso granular: Implementa listas de acceso y autenticación HTTP básica para proteger tus servicios. Puedes restringir el acceso por IP o requerir usuario y contraseña.
- Gestión multiusuario completa: Crea múltiples usuarios con permisos específicos y auditoría de acciones. Perfecto para equipos que necesitan colaborar.
- Configuración avanzada opcional: Para usuarios experimentados, permite añadir configuraciones personalizadas de Nginx directamente desde la interfaz.
- Soporte para WebSocket: Habilita fácilmente el soporte WebSocket para aplicaciones que lo requieran, como Home Assistant o servicios de chat en tiempo real.
- Streams TCP/UDP: Además de proxies HTTP, soporta streams para otros protocolos, ampliando las posibilidades de uso.
Además, al desplegarlo con Docker Compose, obtienes portabilidad total, facilidad de actualización con un solo comando y la capacidad de replicar la configuración en múltiples servidores mediante un simple archivo YAML.
Requisitos previos para instalar Nginx Proxy Manager Docker Compose
Antes de comenzar con la instalación, asegúrate de tener preparado lo siguiente en tu servidor:
- Docker instalado: Versión 20.10 o superior. Consulta la documentación oficial de Docker para instalarlo en tu sistema operativo específico.
- Docker Compose: Versión 2.0 o superior. Revisa la guía de instalación de Docker Compose para tu plataforma.
- Puertos disponibles: Los puertos 80, 81 y 443 deben estar libres en tu servidor. El puerto 81 será para la interfaz de administración.
- Dominio configurado (opcional pero recomendado): Si quieres usar SSL de Let’s Encrypt, necesitarás un dominio apuntando a tu servidor público.
- Router con port forwarding: Para acceso desde internet, configura el reenvío de puertos 80 y 443 hacia la IP local de tu servidor.
- Recursos mínimos: 512 MB de RAM y 1 GB de espacio en disco son suficientes para una instalación básica.
Si planeas gestionar decenas de dominios con tráfico elevado, considera aumentar los recursos disponibles. Sin embargo, para un homelab típico con 5-10 servicios, los recursos mínimos son más que suficientes.
Instalación completa de Nginx Proxy Manager Docker Compose paso a paso
Paso 1: Crear el directorio del proyecto
Primero, crea un directorio dedicado donde almacenarás toda la configuración del servicio:
mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
Esta estructura te permitirá mantener organizados todos los archivos relacionados con el gestor de proxies en un solo lugar, facilitando backups y migraciones futuras.
Paso 2: Crear el archivo docker-compose.yml
Crea el archivo de configuración principal con el siguiente contenido optimizado:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # Puerto HTTP público
- '81:81' # Puerto de la interfaz de administración
- '443:443' # Puerto HTTPS público
environment:
TZ: 'Europe/Madrid' # Ajusta tu zona horaria
DB_SQLITE_FILE: "/data/database.sqlite"
DISABLE_IPV6: 'false' # Habilitar IPv6 si lo necesitas
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy
healthcheck:
test: ["CMD", "/bin/check-health"]
interval: 10s
timeout: 3s
networks:
proxy:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
Esta configuración utiliza SQLite como base de datos integrada, lo que simplifica enormemente el despliegue al no requerir un contenedor de base de datos adicional como MySQL o MariaDB. Los volúmenes aseguran que tus datos, configuraciones y certificados persistan entre reinicios y actualizaciones.
El healthcheck incluido permite a Docker monitorizar automáticamente la salud del contenedor y reiniciarlo si detecta problemas. La red personalizada con subred específica facilita la integración con otros servicios.
Paso 3: Levantar los contenedores
Ejecuta el comando para iniciar el servicio en segundo plano:
docker compose up -d
El parámetro -d (detached mode) ejecuta los contenedores en segundo plano, liberando tu terminal. El primer inicio puede tomar entre 30 segundos y 2 minutos mientras se descargan las imágenes Docker y se inicializa la base de datos SQLite.
Durante este proceso, Docker descargará aproximadamente 200 MB de datos correspondientes a la imagen del contenedor y sus dependencias.
Paso 4: Verificar que los contenedores están ejecutándose
Confirma que todo se ha iniciado correctamente:
docker compose ps
Deberías ver el contenedor nginx-proxy-manager en estado «Up» y con el healthcheck mostrando «healthy». Si ves algún problema, revisa los logs:
docker compose logs -f
Configuración inicial de Nginx Proxy Manager Docker Compose
Acceder a la interfaz web de administración
Una vez que el contenedor esté ejecutándose, abre tu navegador preferido y accede a:
http://IP-DE-TU-SERVIDOR:81
O si estás trabajando directamente en el mismo servidor:
http://localhost:81
La interfaz de login debería cargarse mostrando un diseño moderno y limpio con el logo de Nginx Proxy Manager.
Credenciales por defecto del primer acceso
En el primer acceso a nginx proxy manager docker compose utiliza estas credenciales predefinidas:
- Email: [email protected]
- Password: changeme
Inmediatamente después del login, el sistema te forzará a cambiar estos datos por seguridad. Configura un email válido que controles y una contraseña robusta de al menos 12 caracteres con mayúsculas, minúsculas, números y símbolos.
Esta medida de seguridad es crítica, ya que esta interfaz controla el acceso a todos tus servicios. No uses contraseñas débiles o reutilizadas de otras plataformas.
Configurar tu primer dominio con SSL automático
Una vez dentro del panel de administración:
- Haz clic en el botón «Proxy Hosts» en el menú principal izquierdo
- Selecciona el botón azul «Add Proxy Host» en la esquina superior derecha
- En la pestaña «Details», rellena cuidadosamente los campos:
- Domain Names: Introduce tu dominio completo (ejemplo: servicio.tudominio.com). Puedes añadir múltiples dominios separados por comas.
- Scheme: Selecciona http o https según el protocolo que use tu servicio destino internamente
- Forward Hostname/IP: Introduce la IP del contenedor o servicio interno, o el nombre del contenedor si está en la misma red Docker
- Forward Port: Puerto donde escucha tu servicio destino (comúnmente 80, 8080, 3000, etc.)
- Cache Assets: Actívalo si quieres cachear recursos estáticos para mejor rendimiento
- Block Common Exploits: Recomendado activarlo para protección básica contra ataques comunes
- Websockets Support: Actívalo si tu aplicación usa WebSockets (Home Assistant, chat apps, etc.)
- Cambia a la pestaña «SSL»:
- Marca la opción «Request a new SSL Certificate»
- Activa «Force SSL» para redirigir automáticamente HTTP a HTTPS
- Activa «HTTP/2 Support» para mejor rendimiento
- Introduce tu email en el campo correspondiente
- Acepta los términos de servicio de Let’s Encrypt
- Haz clic en el botón «Save» y espera unos segundos
El sistema solicitará automáticamente el certificado SSL a Let’s Encrypt, lo validará mediante el desafío HTTP-01, lo descargará y lo configurará. En menos de un minuto tendrás tu servicio accesible con HTTPS válido y reconocido por todos los navegadores.
Si el proceso falla, verifica que tu dominio apunte correctamente a tu IP pública y que los puertos 80 y 443 estén correctamente reenviados en tu router hacia el servidor donde corre nginx proxy manager docker compose.
Casos de uso avanzados con Nginx Proxy Manager Docker Compose
Proteger servicios sensibles con autenticación HTTP
Para añadir una capa adicional de seguridad con autenticación HTTP básica a cualquier servicio:
- Ve a la sección «Access Lists» en el menú lateral
- Haz clic en «Add Access List»
- Dale un nombre descriptivo (ejemplo: «Servicios Internos»)
- En la pestaña «Authorization», añade usuarios con sus contraseñas
- Opcionalmente, en «Access» puedes restringir por direcciones IP específicas
- Guarda la lista de acceso
- Edita cualquier Proxy Host existente y en la pestaña «Details», asigna la Access List creada
Esto protegerá tus servicios internos con una capa adicional de seguridad sin necesidad de modificar la aplicación subyacente. Los navegadores solicitarán usuario y contraseña antes de acceder al servicio.
Configurar redireccionamientos permanentes y temporales
Para crear redireccionamientos HTTP 301 (permanentes) o 302 (temporales):
- Selecciona «Redirection Hosts» en el menú
- Haz clic en «Add Redirection Host»
- Configura el dominio origen (el que quieres redirigir)
- Especifica la URL de destino completa
- Elige el código de estado: 301 para redirecciones permanentes (útil para SEO) o 302 para temporales
- Opcionalmente, activa SSL para el dominio origen también
Esta funcionalidad es útil para migrar dominios, unificar variantes www/non-www, o redirigir tráfico de dominios antiguos a nuevos manteniendo el SEO.
Integración perfecta con otros servicios Docker
Si tienes otros servicios corriendo en la misma red Docker, puedes referenciarlos directamente por su nombre de contenedor en lugar de usar IPs:
# En Forward Hostname/IP usa el nombre del contenedor:
nombre-contenedor
# Ejemplo para Nextcloud:
Forward Hostname: nextcloud
Forward Port: 80
# Ejemplo para Jellyfin:
Forward Hostname: jellyfin
Forward Port: 8096
Esto permite exponer servicios como Nextcloud, Portainer, Jellyfin, Vaultwarden y otros contenedores Docker Compose de forma segura con HTTPS automático, sin preocuparte por las IPs internas que puedan cambiar.
Para que esto funcione, asegúrate de que ambos contenedores estén en la misma red Docker. Puedes modificar el docker-compose.yml de otros servicios para incluir la red de nginx proxy manager docker compose:
services:
nextcloud:
image: nextcloud:latest
networks:
- nginx-proxy-manager_proxy
- default
networks:
nginx-proxy-manager_proxy:
external: true
Configurar certificados wildcard para subdominios
Si gestionas múltiples subdominios del mismo dominio base, considera usar un certificado wildcard (*.tudominio.com). Esto requiere validación DNS en lugar de HTTP:
- Al crear el Proxy Host, en Domain Names introduce: *.tudominio.com
- En la pestaña SSL, selecciona el proveedor DNS que uses (Cloudflare, DigitalOcean, etc.)
- Proporciona las credenciales API necesarias
- Let’s Encrypt validará tu dominio mediante registros DNS automáticamente
Un certificado wildcard es más eficiente si planeas crear muchos subdominios, ya que todos comparten el mismo certificado en lugar de solicitar uno individual para cada uno.
Solución de problemas comunes
Error al obtener certificado SSL de Let’s Encrypt
Si falla la obtención del certificado SSL automático, verifica estos puntos:
- DNS correcto: Tu dominio debe apuntar correctamente a la IP pública de tu servidor. Verifica con:
nslookup tudominio.com - Puertos abiertos: Los puertos 80 y 443 deben estar abiertos y accesibles desde internet. Verifica firewall y router.
- Límites de Let’s Encrypt: No puedes superar 5 intentos fallidos por dominio por hora. Espera antes de reintentar.
- Staging environment: Para pruebas, considera usar el entorno de staging de Let’s Encrypt que tiene límites más permisivos.
Puedes verificar si los puertos están accesibles desde internet usando herramientas online como YouGetSignal Port Check.
Puerto 80 o 443 ya están en uso
Si tienes otros servicios web usando estos puertos estándar:
# Detén Apache/Nginx si están instalados directamente:
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl stop nginx
sudo systemctl disable nginx
# Verifica que los puertos estén libres:
sudo netstat -tulpn | grep ':80\|:443'
Alternativamente, puedes cambiar los puertos externos en tu archivo docker-compose.yml, aunque esto limitará el uso de Let’s Encrypt con validación HTTP:
ports:
- '8080:80'
- '8443:443'
Los contenedores no se comunican entre sí
Si nginx proxy manager docker compose no puede alcanzar tus servicios backend:
- Verifica que ambos contenedores estén en la misma red Docker con:
docker network inspect nginx-proxy-manager_proxy - Asegúrate de usar el nombre del contenedor correcto, no la IP
- Confirma que el servicio destino esté escuchando en la IP 0.0.0.0 y no solo en 127.0.0.1
- Revisa los logs de ambos contenedores para identificar errores específicos
Puedes añadir servicios existentes a la red proxy editando su docker-compose.yml:
services:
mi-servicio:
image: mi-imagen
networks:
- nginx-proxy-manager_proxy
- default
networks:
nginx-proxy-manager_proxy:
external: true
Mejores prácticas de seguridad y rendimiento
- Cambia el puerto de administración: Modifica el puerto 81 a uno no estándar y aleatorio (ej: 19843) para reducir ataques automatizados de escaneo de puertos.
- Usa Access Lists estratégicamente: Protege servicios sensibles como Portainer o bases de datos con autenticación adicional y restricciones por IP.
- Actualiza regularmente: Ejecuta
docker compose pull && docker compose up -dmensualmente para obtener parches de seguridad. - Habilita fail2ban: Configura protección contra intentos de fuerza bruta a nivel de sistema operativo monitorizando logs de Nginx.
- Backups automáticos programados: Respalda el directorio
./dataque contiene la base de datos SQLite y todas las configuraciones. Considera usar Duplicati o restic. - Certificados wildcard para múltiples subdominios: Reduce la cantidad de solicitudes a Let’s Encrypt y simplifica la gestión.
- Monitoring con Uptime Kuma: Integra monitorización de todos tus proxies para detectar caídas inmediatamente.
- Logs centralizados: Configura el envío de logs a un sistema centralizado como Loki o Elasticsearch para análisis de seguridad.
- HTTP/2 y HTTP/3: Asegúrate de tener activado HTTP/2 en todos los hosts para mejor rendimiento.
Actualización y mantenimiento de Nginx Proxy Manager Docker Compose
Mantener tu instalación de nginx proxy manager docker compose actualizada es crucial para seguridad y nuevas funcionalidades:
cd ~/nginx-proxy-manager
# Descargar la última versión
docker compose pull
# Recrear contenedores con la nueva versión
docker compose up -d
# Eliminar imágenes antiguas para liberar espacio
docker image prune -a
Docker Compose detectará automáticamente la nueva imagen, detendrá el contenedor antiguo de forma ordenada y levantará uno nuevo con la versión actualizada, conservando todos tus datos, configuraciones, certificados y proxies configurados.
Para ver los logs en tiempo real en caso de problemas:
# Ver logs en vivo
docker compose logs -f
# Ver solo los últimos 100 mensajes
docker compose logs --tail=100
# Filtrar logs por nivel de error
docker compose logs | grep -i error
Establece un recordatorio mensual para ejecutar estas actualizaciones. El proceso completo toma menos de 2 minutos y el downtime es inferior a 10 segundos.
Preguntas frecuentes (FAQ) sobre Nginx Proxy Manager Docker Compose
¿Puedo usar Nginx Proxy Manager Docker Compose con múltiples subdominios?
Sí, absolutamente. Puedes configurar tantos subdominios como necesites, cada uno apuntando a servicios diferentes. Todos pueden tener sus propios certificados SSL automáticos individuales, o puedes usar un único certificado wildcard para todos los subdominios de un dominio base. Solo asegúrate de que tus registros DNS (A o CNAME) estén correctamente configurados para cada subdominio.
¿Es gratuito el certificado SSL de Let’s Encrypt?
Sí, completamente gratuito y sin límites. La aplicación utiliza Let’s Encrypt, una autoridad certificadora sin costo que proporciona certificados válidos reconocidos por todos los navegadores modernos. Los certificados se renuevan automáticamente cada 90 días, 30 días antes de su caducidad, sin requerir intervención manual alguna.
¿Puedo usar certificados SSL propios o comerciales?
Absolutamente. Si ya posees certificados SSL de proveedores comerciales como DigiCert, Sectigo o Comodo, nginx proxy manager docker compose te permite usarlos. En la configuración del Proxy Host, en lugar de solicitar un nuevo certificado de Let’s Encrypt, selecciona la opción «Custom SSL» y sube tus archivos de certificado (.crt o .pem) y clave privada (.key).
¿Funciona con IPv6 y redes dual-stack?
Sí, el servicio soporta tanto IPv4 como IPv6 simultáneamente en configuraciones dual-stack. Solo necesitas asegurarte de que tu servidor tenga configurada correctamente la conectividad IPv6, que tus registros DNS incluyan registros AAAA además de los A, y que hayas establecido DISABLE_IPV6: 'false' en las variables de entorno del docker-compose.yml.
¿Cuántos dominios puedo gestionar simultáneamente?
No hay límite técnico impuesto por la aplicación en cuanto a la cantidad de dominios, proxies o redireccionamientos que puedes gestionar. La única restricción real es la capacidad de tu servidor en términos de CPU, RAM y ancho de banda. Con recursos modestos (2 CPU, 2GB RAM) puedes gestionar fácilmente entre 50-100 dominios sin problemas de rendimiento, asumiendo tráfico moderado en cada uno.
¿Puedo migrar mi configuración a otro servidor?
Sí, la migración es extremadamente sencilla gracias a Docker Compose. Simplemente copia el directorio completo que contiene el docker-compose.yml y las carpetas data/ y letsencrypt/ al nuevo servidor. Luego ejecuta docker compose up -d en la nueva ubicación. Toda tu configuración, usuarios, proxies y certificados se transferirán instantáneamente sin necesidad de reconfiguración.
Conclusión: Nginx Proxy Manager Docker Compose simplifica tu infraestructura
Nginx Proxy Manager Docker Compose democratiza la gestión profesional de proxies inversos al eliminar completamente la complejidad técnica sin sacrificar ninguna funcionalidad avanzada. En cuestión de minutos puedes tener múltiples servicios expuestos con HTTPS válido, protegidos con autenticación robusta y gestionados desde una interfaz elegante e intuitiva.
Ya seas un entusiasta del homelab que quiere acceder a sus servicios domésticos desde cualquier lugar del mundo, o un administrador de sistemas que busca una solución robusta y mantenible para pequeños y medianos proyectos, esta herramienta cumple perfectamente con todos los requisitos. La renovación automática de certificados SSL y la facilidad de configuración te ahorrarán literalmente horas de trabajo cada mes y eliminarán dolores de cabeza relacionados con certificados caducados.
La arquitectura basada en contenedores Docker garantiza portabilidad total entre diferentes servidores y sistemas operativos. Puedes desarrollar localmente en tu laptop, probar en un servidor de staging y desplegar en producción simplemente copiando archivos. Esta flexibilidad es invaluable en entornos modernos de DevOps.
Si te ha resultado útil esta guía completa sobre nginx proxy manager docker compose, te recomiendo explorar otros servicios complementarios que se integran perfectamente con este gestor de proxies. Home Assistant para automatización completa del hogar, Uptime Kuma para monitorizar todos tus servicios, o Vaultwarden para gestión segura de contraseñas. Todos estos servicios pueden exponerse de forma segura con HTTPS mediante esta solución.
¿Has implementado el servicio en tu homelab personal o en producción? ¿Tienes alguna configuración avanzada interesante o casos de uso específicos que quieras compartir con la comunidad? ¿Te has encontrado con algún desafío particular durante la instalación? Déjame un comentario más abajo, me encantaría conocer tu experiencia y ayudarte con cualquier duda que puedas tener.
