[{"data":1,"prerenderedAt":216},["ShallowReactive",2],{"seo-verification":3,"blog-elegir-reverse-proxy-vps-caddy-traefik-nginx-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-elegir-reverse-proxy-vps-caddy-traefik-nginx-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":159,"ctaBody":160,"ctaButton":161,"ctaUrl":162,"relatedPosts":163},227,"elegir-reverse-proxy-vps-caddy-traefik-nginx",{"fr":12,"en":13,"ar":14,"es":10},"choisir-reverse-proxy-vps-caddy-traefik-nginx","caddy-traefik-or-nginx-proxy-manager-which-to-choose","caddy-أم-traefik-أم-nginx-proxy-manager-أيهما-تختار","Caddy, Traefik o Nginx Proxy Manager: ¿cuál elegir?","Guía para elegir entre Caddy, Traefik y Nginx Proxy Manager en un VPS con Docker: criterios, tabla comparativa y recomendaciones según su perfil.",10,0,false,"2026-08-06T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},5,"Comparativas","comparatif","bg-info\u002F10 text-info",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx-poster.svg","Aloja varias aplicaciones Docker en un VPS y necesita exponer cada una por HTTPS con un nombre de dominio distinto. Un reverse proxy es la pieza central de esta arquitectura: recibe todo el tráfico entrante en los puertos 80 y 443, gestiona los certificados TLS y lo encamina hacia el contenedor correcto. Caddy, Traefik y Nginx Proxy Manager son las tres soluciones más populares; esta guía le ayuda a elegir la que corresponde a su perfil.",[34,38,47,50,96,99,121,124,139,142,145,148,156],{"type":35,"title":36,"body":37},"h2","Por qué un reverse proxy es imprescindible con Docker","Por defecto, cada contenedor Docker escucha en un puerto arbitrario: su Nextcloud está en el puerto 8080, su Gitea en el 3000, su Vaultwarden en el 8200. Es imposible exponer directamente una decena de puertos en producción: los navegadores no aceptan URL con número de puerto, los certificados TLS cubren nombres de dominio y no puertos, y su cortafuegos debe permanecer cerrado en todo salvo el 80 y el 443. El reverse proxy resuelve estos tres problemas de una sola vez: se convierte en el único punto de entrada público, enruta el tráfico según el nombre de host o la ruta, y se encarga de la terminación TLS. Resultado: `app1.su-dominio.com` y `app2.su-dominio.com` apuntan ambas al puerto 443 de su VPS, y el proxy sabe hacia qué contenedor enviar cada petición. Sin este mecanismo, se vería obligado a gestionar manualmente los certificados Let's Encrypt, a abrir múltiples puertos y a complicar considerablemente su cortafuegos.",{"type":39,"title":40,"items":41},"ul","Lo que un reverse proxy le aporta en la práctica",[42,43,44,45,46],"**Terminación TLS centralizada** — una sola herramienta obtiene y renueva automáticamente los certificados Let's Encrypt de todos sus dominios","**Enrutamiento por nombre de host** — `git.su-dominio.com` va hacia Gitea y `cloud.su-dominio.com` hacia Nextcloud, sin ningún conflicto de puertos","**Cortafuegos simplificado** — solo los puertos 80 y 443 están abiertos al público; todos los puertos internos de Docker quedan inaccesibles desde el exterior","**Redirección HTTP → HTTPS automática** — todo el tráfico sin cifrar se redirige con un 301, sin configuración manual en cada aplicación","**Observabilidad centralizada** — los registros de acceso y de error de todas sus aplicaciones se agregan en un solo lugar para facilitar la depuración",{"type":35,"title":48,"body":49},"Requisitos comunes a las tres soluciones","Antes de elegir e instalar uno de estos tres proxies, asegúrese de que su VPS cumple algunas condiciones básicas. Docker y Docker Compose deben estar instalados (se recomienda Compose V2, es decir el comando `docker compose` sin guion). Sus registros DNS deben apuntar a la IP pública de su VPS antes de lanzar la solicitud de certificado: Let's Encrypt comprueba el DNS durante la validación HTTP-01, y un error en esta fase puede provocar un rate limit que bloquee sus intentos durante varias horas. Los puertos 80 y 443 de su VPS deben estar libres: compruebe con `ss -tlnp | grep -E ':80|:443'` que ningún otro servicio los ocupa ya. Por último, cree una red Docker dedicada para su proxy — `docker network create proxy` — que conectará a cada contenedor que el proxy deba alcanzar.",{"type":51,"title":52,"headers":53,"rows":58},"comparison","Tabla comparativa: Caddy vs Traefik vs Nginx Proxy Manager",[54,55,56,57],"Criterio","Caddy","Traefik","Nginx Proxy Manager",[59,63,68,73,78,81,86,91],[60,61,62,61],"Facilidad de instalación","⭐⭐⭐⭐⭐ Muy sencilla","⭐⭐⭐ Media",[64,65,66,67],"TLS automático (Let's Encrypt)","✅ Nativo, cero configuración","✅ Vía ACME","✅ Vía interfaz web",[69,70,71,72],"Integración con Docker","Manual (labels o configuración)","✅ Labels nativos","✅ Vía GUI",[74,75,76,77],"Método de configuración","Archivo Caddyfile legible","Labels Docker + YAML","Interfaz web gráfica",[79,80,80,80],"Recarga sin cortes","✅ Automática",[82,83,84,85],"Interfaz web\u002Fdashboard","❌ No","✅ Dashboard incluido","✅ Interfaz completa",[87,88,89,90],"Consumo de memoria","~30 MB","~50 MB","~100 MB (MariaDB incluido)",[92,93,94,95],"Ideal para","Proyectos individuales\u002Fequipos pequeños","Microservicios, CI\u002FCD","Principiantes, equipos mixtos",{"type":35,"title":97,"body":98},"Caddy: la opción por defecto para la mayoría de los casos","Caddy se ha impuesto como la opción más sencilla para los desarrolladores que alojan entre dos y diez aplicaciones en un VPS. Su filosofía es radical: el TLS se activa por defecto para cualquier dominio válido, sin ninguna opción que marcar ni variable que definir. El archivo de configuración `Caddyfile` es deliberadamente legible, cercano al lenguaje natural, y puede caber en una decena de líneas para un caso de uso corriente. Caddy está escrito en Go e incorpora su propio cliente ACME: contacta directamente con Let's Encrypt, almacena los certificados en su directorio de datos y los renueva automáticamente antes de que caduquen. A diferencia de Nginx, que necesita certbot como servicio aparte, Caddy no tiene ninguna dependencia externa para el TLS. Su consumo de memoria se mantiene en torno a 30 MB en reposo, lo que lo hace perfectamente adecuado para los VPS de gama de entrada con 1 o 2 GB de RAM. El único defecto real de Caddy: el descubrimiento automático de los contenedores Docker no es nativo. Para remediarlo se usa el plugin `caddy-docker-proxy` o una configuración estática en el Caddyfile.",{"type":100,"title":101,"steps":102},"steps","Desplegar Caddy como reverse proxy de Docker",[103,106,109,112,115,118],{"title":104,"body":105},"Crear la red Docker compartida","Antes de nada, cree la red que Caddy y sus aplicaciones compartirán: `docker network create proxy`. Esta red aislada permite a Caddy alcanzar sus contenedores por su nombre sin exponer sus puertos en el host.",{"title":107,"body":108},"Escribir el Caddyfile","Cree un archivo `Caddyfile` en la raíz de su proyecto. Para exponer una aplicación en `app.su-dominio.com` hacia un contenedor llamado `miapp` que escucha en el puerto 3000: `app.su-dominio.com { reverse_proxy miapp:3000 }`. Caddy obtiene el certificado automáticamente en el primer arranque.",{"title":110,"body":111},"Escribir el docker-compose.yml de Caddy","Cree un `docker-compose.yml` con el servicio Caddy: monte el `Caddyfile` en solo lectura (`.\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro`), persista los datos TLS en un volumen con nombre (`caddy_data:\u002Fdata`), publique los puertos 80 y 443, y conecte Caddy a la red `proxy` declarándola como red externa.",{"title":113,"body":114},"Conectar sus aplicaciones a la red proxy","En el `docker-compose.yml` de cada aplicación, añada la red `proxy` como red externa y deje de exponer los puertos en el host (`expose` en lugar de `ports`). Caddy alcanzará el contenedor a través de la red interna de Docker.",{"title":116,"body":117},"Arrancar y comprobar","Lance Caddy con `docker compose up -d` y siga después los registros con `docker compose logs -f caddy`. Debería ver `certificate obtained successfully` para cada dominio. Pruebe con `curl -I https:\u002F\u002Fapp.su-dominio.com`.",{"title":119,"body":120},"Añadir una nueva aplicación","Para cada nueva aplicación, añada un bloque en el `Caddyfile`, recargue Caddy sin cortes con `docker exec caddy caddy reload --config \u002Fetc\u002Fcaddy\u002FCaddyfile`, y conecte el nuevo contenedor a la red `proxy`.",{"type":35,"title":122,"body":123},"Traefik: cuándo elegir el descubrimiento automático","Traefik destaca en los contextos donde el número de servicios cambia con frecuencia: entornos de CI\u002FCD que crean y destruyen contenedores en cada despliegue, arquitecturas de microservicios con más de cinco servicios independientes, o equipos en los que cada desarrollador despliega sus propios stacks sin tocar una configuración centralizada. Su mecanismo de descubrimiento automático mediante labels de Docker es su principal baza: cuando arranca un contenedor con los labels correctos (`traefik.http.routers.miapp.rule=Host('app.su-dominio.com')`), Traefik lo detecta al instante y crea la ruta sin que usted tenga que tocar su configuración. Traefik incluye además un dashboard web que muestra en tiempo real todos los routers, servicios y middlewares activos. En cambio, la curva de aprendizaje es más pronunciada: los middlewares, los entrypoints y la sintaxis de los labels pueden desorientar a los principiantes, y una errata en un label puede dejar una aplicación inaccesible de forma silenciosa.",{"type":100,"title":125,"steps":126},"Desplegar Traefik con descubrimiento automático de Docker",[127,130,133,136],{"title":128,"body":129},"Crear el archivo de configuración estática","Cree `traefik.yml` con los entrypoints (`web` en el puerto 80, `websecure` en el 443), active el provider Docker (`docker: { exposedByDefault: false }`), configure el resolver ACME con su dirección de correo para Let's Encrypt, y active el dashboard en modo seguro.",{"title":131,"body":132},"Lanzar Traefik con Docker Compose","En el `docker-compose.yml` de Traefik, monte el socket de Docker en solo lectura (`\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro`), monte `traefik.yml`, persista los certificados en un volumen y publique los puertos 80 y 443. Arranque con `docker compose up -d`.",{"title":134,"body":135},"Anotar sus contenedores con labels","En cada servicio que quiera exponer, añada los labels de Traefik: `traefik.enable=true`, la rule del router (`traefik.http.routers.miapp.rule=Host('app.su-dominio.com')`), el entrypoint (`websecure`), el resolver TLS y el puerto interno del servicio.",{"title":137,"body":138},"Comprobar en el dashboard","Acceda al dashboard de Traefik (en el puerto 8080 en local o mediante un subdominio protegido) y compruebe que su router aparece en verde con el estado `Enabled`. Si el router no aparece, verifique que el label `traefik.enable=true` está presente.",{"type":140,"body":141},"tip","Seguridad crítica: no monte nunca el socket de Docker (`\u002Fvar\u002Frun\u002Fdocker.sock`) sin restricciones en un entorno multiusuario, porque cualquiera que pueda escribir en ese socket puede tomar el control total del host. En producción, prefiera el socket en solo lectura (`ro`) o utilice un proxy de socket como `docker-socket-proxy`. Aplique también un middleware de autenticación básica al dashboard de Traefik antes de exponerlo públicamente.",{"type":35,"title":143,"body":144},"Nginx Proxy Manager: la opción sin archivos de configuración","Nginx Proxy Manager (NPM) es la elección evidente para quien no se siente cómodo con los archivos de configuración en línea de comandos. Su interfaz web permite crear un host proxy en unos pocos clics: basta con introducir el nombre de dominio y la dirección del contenedor de destino, marcar «Force SSL» y «HTTP\u002F2 Support» y hacer clic en «Save». NPM se encarga del resto, incluida la solicitud del certificado Let's Encrypt. La interfaz permite además gestionar varios usuarios con permisos distintos, añadir listas de control de acceso y configurar redirecciones. En cambio, NPM incorpora una base de datos MariaDB para almacenar su configuración, lo que eleva su consumo de memoria hasta unos 100 MB, casi el triple que Caddy. NPM encaja perfectamente en equipos mixtos técnicos\u002Fno técnicos o en contextos donde otras personas además del sysadmin principal deben gestionar dominios.",{"type":35,"title":146,"body":147},"Solución de problemas: los errores más frecuentes","La mayoría de los problemas que aparecen pertenece a cuatro categorías. En primer lugar, los rate limits de Let's Encrypt: si relanza su stack varias veces durante las pruebas con el mismo dominio, puede agotar el límite de cinco certificados por dominio cada siete días. Solución: utilice el entorno de staging de Let's Encrypt (`acme_ca https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory` en Caddy) para sus pruebas. En segundo lugar, los conflictos de puertos: si el puerto 80 o el 443 ya está ocupado por el Apache o el Nginx del host, el proxy Docker no arrancará. Identifique el proceso con `ss -tlnp | grep :80`. En tercer lugar, los errores de red de Docker: compruebe que el proxy y el contenedor de destino están en la misma red con `docker network inspect proxy`. En cuarto lugar, en el caso de Traefik, las erratas en los labels: active los registros en modo DEBUG con `--log.level=DEBUG`.",{"type":39,"title":149,"items":150},"Resumen: qué proxy para cada perfil",[151,152,153,154,155],"**Desarrollador en solitario, de 2 a 5 aplicaciones** — Caddy: configuración mínima, TLS automático y puesta en marcha en menos de diez minutos con un Caddyfile de quince líneas","**Equipo DevOps, microservicios, CI\u002FCD** — Traefik: descubrimiento automático mediante labels, dashboard de supervisión, perfecto cuando el número de servicios varía dinámicamente","**Usuario no técnico o equipo mixto** — Nginx Proxy Manager: interfaz gráfica intuitiva, ningún archivo que editar, gestión multiusuario integrada","**VPS con poca RAM (512 MB a 1 GB)** — Caddy o Traefik: evite NPM, que incorpora MariaDB y consume más memoria","**Migración progresiva desde Nginx** — Caddy: su sintaxis se aprende en una hora y puede convivir temporalmente con Nginx en puertos distintos",{"type":35,"title":157,"body":158},"Conclusión: empiece por Caddy y evolucione si hace falta","Para la gran mayoría de los self-hosters que gestionan unas pocas aplicaciones Docker en un VPS, Caddy es el punto de partida ideal: es sencillo, ligero, opinionado en el buen sentido y gestiona el TLS mejor que cualquier alternativa, sin configuración adicional. Si su infraestructura crece más allá de cinco servicios con despliegues frecuentes y automatizados, Traefik resulta más adecuado gracias a su descubrimiento dinámico. Si tiene que delegar la gestión de los dominios en personas no técnicas, Nginx Proxy Manager es la única opción realmente accesible.","Su VPS listo para Docker en menos de 5 minutos","Los VPS de ServOrbit se entregan con Docker preinstalado, una IP pública dedicada y una red de 1 Gbps. Despliegue Caddy, Traefik o Nginx Proxy Manager inmediatamente después de la entrega, sin ninguna configuración de red adicional.","Descubrir los VPS ServOrbit","\u002Fsolutions\u002Fdeveloppeurs",[164,186,200],{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":173,"views":174,"isPinned":19,"publishedAt":175,"updatedAt":21,"category":176,"categories":180,"featuredImage":29,"bgImage":30,"posterImage":182,"relatedSolution":183},39,"desplegar-con-caddy",{"fr":168,"en":169,"ar":170,"es":166},"deployer-avec-caddy","deploy-your-applications-with-caddy-on-a-vps","انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps","Desplegar sus aplicaciones con Caddy en un VPS","Despliegue Caddy en su VPS: servidor web y reverse proxy con HTTPS automático. Un Caddyfile de pocas líneas basta para pasar a producción.",3,1,"2026-05-12T00:00:00+00:00",{"id":173,"name":177,"slug":178,"color":179,"icon":178},"Despliegue","deploiement","bg-success\u002F10 text-success",[181],{"id":173,"name":177,"slug":178,"color":179,"icon":178},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":184,"appSlug":185},"despliegue-de-aplicaciones-devops","caddy",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":173,"views":18,"isPinned":19,"publishedAt":195,"updatedAt":21,"category":196,"categories":197,"featuredImage":29,"bgImage":30,"posterImage":199,"relatedSolution":29},38,"desplegar-con-traefik",{"fr":190,"en":191,"ar":192,"es":188},"deployer-avec-traefik","deploy-your-applications-with-traefik-on-a-vps","انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps","Desplegar sus aplicaciones con Traefik en un VPS","Despliegue Traefik como reverse proxy en su VPS: enrutamiento automático de los contenedores Docker, certificados SSL Let's Encrypt y balanceo de carga.","2026-05-13T00:00:00+00:00",{"id":173,"name":177,"slug":178,"color":179,"icon":178},[198],{"id":173,"name":177,"slug":178,"color":179,"icon":178},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":201,"slug":202,"slugs":203,"title":207,"excerpt":208,"readTime":209,"views":210,"isPinned":19,"publishedAt":211,"updatedAt":21,"category":212,"categories":213,"featuredImage":29,"bgImage":30,"posterImage":215,"relatedSolution":29},37,"desplegar-con-nginx-proxy-manager",{"fr":204,"en":205,"ar":206,"es":202},"deployer-avec-nginx-proxy-manager","deploy-your-applications-with-nginx-proxy-manager-on-a-vps","انشر-تطبيقاتك-باستخدام-nginx-proxy-manager-على-خادم-vps","Desplegar sus aplicaciones con Nginx Proxy Manager en un VPS","Gestione dominios, SSL y reverse proxy de varios servicios en un VPS con Nginx Proxy Manager: instalación, redes Docker, errores 502 y ajustes avanzados.",9,2,"2026-05-14T00:00:00+00:00",{"id":173,"name":177,"slug":178,"color":179,"icon":178},[214],{"id":173,"name":177,"slug":178,"color":179,"icon":178},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-nginx-proxy-manager-poster.svg",1789665020592]