Reverse Proxy con Docker
Qué cubre este artículo sobre Reverse Proxies en Docker
- Qué hace un Reverse Proxy.
- Nginx y Traefik como contenedores Docker.
- TLS, certificados y Let’s Encrypt.
- Redirecciones hacia otros contenedores.
- Autenticación y seguridad.
Introducción: Reverse Proxy con Docker
Un Reverse Proxy recibe solicitudes externas y las redirecciona hacia los servicios internos apropiados. En configuraciones Docker es especialmente útil porque muchas aplicaciones se ejecutan en puertos diferentes. En lugar de exponer cada puerto individualmente, muestras solo el Reverse Proxy en el puerto 80 o 443 y dejas que decida a dónde va cada solicitud basándose en nombres de dominio o rutas.
Este artículo te muestra cómo ejecutar Nginx Proxy Manager y Traefik en Docker, además de qué configuraciones de seguridad importan.
Términos clave
- Reverse Proxy: intermediario entre cliente y backend.
- Upstream: servicio de destino configurado.
- TLS: cifrado de la conexión.
- Certificado: documento digital para identidad TLS.
- Let’s Encrypt: autoridad de certificación gratuita.
- NPM: Nginx Proxy Manager.
- Traefik: Reverse Proxy nativo en la nube con auto-descubrimiento.
- Autenticación: verificación del acceso.
Por qué un Reverse Proxy
- Punto central para todos los servicios.
- Cifrado TLS en un solo lugar.
- Gestión más simple de subdominios.
- Autenticación y rate-limiting posibles.
- Los puertos internos permanecen ocultos.
Nginx Proxy Manager
Nginx Proxy Manager es una interfaz gráfica para Nginx. Ideal para homelabs.
Ejemplo de Compose
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- npm-data:/data
- npm-letsencrypt:/etc/letsencrypt
restart: unless-stopped
volumes:
npm-data:
npm-letsencrypt:
Configuración
- Inicia el contenedor.
- Accede a
http://host:81. - Login predeterminado:
admin@example.com/changeme. - Crea Proxy Hosts para tus servicios internos.
- Opcionalmente, añade certificados SSL.
Traefik
Traefik detecta contenedores Docker automáticamente y crea rutas dinámicamente. Adecuado para configuraciones más avanzadas.
Ejemplo de Compose
services:
traefik:
image: traefik:v3.0
container_name: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=mail@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
restart: unless-stopped
Labels para un servicio
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
labels:
- "traefik.enable=true"
- "traefik.http.routers.webui.rule=Host(`webui.home.local`)"
- "traefik.http.routers.webui.entrypoints=web"
TLS en redes locales
Para dominios internos sin DNS público, puedes usar certificados propios o mkcert:
mkcert home.local
El certificado será aceptado en el almacén de confianza local.
Autenticación
Nginx Proxy Manager ofrece Access Lists integradas. Traefik puede usar ForwardAuth con Authelia, Authentik u oauth2-proxy:
labels:
- "traefik.http.routers.webui.middlewares=authelia@docker"
Redirecciones hacia Ollama y Open WebUI
| Servicio | Puerto interno | Dominio de ejemplo |
|---|---|---|
| Open WebUI | 8080 | webui.home.local |
| Ollama API | 11434 | ollama.home.local |
| Grafana | 3000 | grafana.home.local |
Importante: Ollama no debe ser accesible públicamente. Solo acceso interno o protegido por VPN.
Seguridad
- Vincula el Reverse Proxy a los puertos 80 y 443, mantén los servicios solo internamente.
- Usa TLS para todo acceso externo.
- Autenticación en interfaces administrativas.
- Activa rate-limiting.
- Revisa los logs regularmente.
- Nunca expongas servicios desprotegidos a Internet.
Problemas comunes
- DNS no se resuelve: el dominio local debe estar registrado en tu router o Pi-hole.
- Puerto 80 ocupado: otro servicio está bloqueando HTTP.
- Certificado expirado: Let’s Encrypt no se renueva automáticamente.
- Labels de contenedor incorrectos: Traefik no encuentra el servicio.
- Routing de ruta no funciona: verifica regex o StripPrefix.
- Falta WebSocket: activa soporte de WebSocket para Open WebUI.
Enlaces y recursos adicionales
- BotServ.de Seguridad en Ollama
- BotServ.de Docker Compose
- BotServ.de Docker Volumes
- BotServ.de Fundamentos de Tailscale
FAQ: Reverse Proxy con Docker
¿Necesito un Reverse Proxy? Sí, en cuanto varios servicios deban ser accesibles a través de dominios o TLS.
¿Es mejor Nginx o Traefik? Nginx es más simple, Traefik es más dinámico y nativo en la nube.
¿Puedo usar dominios locales sin Internet? Sí, con DNS local o certificados mkcert.
¿Debo exponer Ollama detrás de un Reverse Proxy? Solo con autenticación y VPN, nunca públicamente.
¿Cómo obtengo certificados gratuitos? A través de Let’s Encrypt o mkcert para redes locales.
Fuentes y lecturas recomendadas
- Nginx Proxy Manager: https://nginxproxymanager.com/
- Traefik: https://traefik.io/
- Let’s Encrypt: https://letsencrypt.org/
- mkcert: https://github.com/FiloSottile/mkcert
Resumen: Reverse Proxy con Docker
Un Reverse Proxy en Docker simplifica la gestión de muchos servicios y centraliza TLS más autenticación. Nginx Proxy Manager es adecuado para homelabs simples, Traefik para configuraciones dinámicas y mayores. Lo importante es tener entradas DNS correctas, certificados seguros, autenticación y protección de servicios sensibles como Ollama. Si lo configuras correctamente, obtendrás una infraestructura clara y segura para tus servicios locales de IA.


