Skip to content
BotServBotServ
DockerReverse ProxyNginxTraefikTLS

Reverse Proxy con Docker

Nginx y Traefik como Reverse Proxy en Docker. TLS, autenticación, redirecciones y mejores prácticas.

S

schutzgeist

3 min read
Reverse Proxy con Docker

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

  1. Inicia el contenedor.
  2. Accede a http://host:81.
  3. Login predeterminado: admin@example.com / changeme.
  4. Crea Proxy Hosts para tus servicios internos.
  5. 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

ServicioPuerto internoDominio de ejemplo
Open WebUI8080webui.home.local
Ollama API11434ollama.home.local
Grafana3000grafana.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

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

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.

Volver al blog
Share:

Entradas relacionadas