[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"seo-verification":3,"blog-caddy-vs-nginx-servidor-web-reverse-proxy-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-caddy-vs-nginx-servidor-web-reverse-proxy-vps-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":32,"intro":35,"sections":36,"ctaTitle":149,"ctaBody":150,"ctaButton":151,"ctaUrl":152,"relatedPosts":153},103,"caddy-vs-nginx-servidor-web-reverse-proxy-vps",{"fr":12,"en":13,"ar":14,"es":10},"caddy-vs-nginx","caddy-vs-nginx-which-web-server-reverse-proxy-for-your-vps","caddy-مقابل-nginx-أي-خادم-ويب-ووكيل-عكسي-لـ-vps","Caddy vs Nginx: ¿qué servidor web\u002Freverse proxy para su VPS?","Caddy vs Nginx en un VPS: comparación completa — HTTPS automático, configuración, HTTP\u002F3, rate limiting, resolución de problemas y cuándo elegir Traefik.",9,1,false,"2026-03-09T00:00:00+00:00","2026-09-10T13:10:43+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\u002Fcaddy-vs-nginx-poster.svg",{"categorySlug":33,"appSlug":34},"despliegue-de-aplicaciones-devops","caddy","En un VPS que sirve tráfico HTTP, el reverse proxy no es un detalle de configuración: es la pieza que gestiona el TLS, distribuye las peticiones hacia sus contenedores y decide las cabeceras de seguridad que ve cada visitante. Caddy automatiza por completo la emisión y la renovación de los certificados Let's Encrypt; Nginx ofrece el ajuste fino más contrastado del mercado. Esta guía los compara en profundidad — configuración avanzada, resolución de problemas, HTTP\u002F3 — y explica cuándo una tercera opción, Traefik, es la elección adecuada.",[37,41,52,55,83,86,89,137,139,142,146],{"type":38,"title":39,"body":40},"h2","Por qué cuidar su reverse proxy en un VPS","En un VPS, el servidor web frontal es la pieza que lo orquesta todo: termina el TLS, distribuye el tráfico hacia sus contenedores (aplicación, forja, servidor multimedia, LLM), sirve los archivos estáticos y aplica las cabeceras de seguridad. Bien elegido, simplifica radicalmente el paso a HTTPS de todos sus subdominios. Caddy obtiene y renueva los certificados Let's Encrypt automáticamente, sin configuración, con un archivo `Caddyfile` legible de unas pocas líneas. Nginx, referencia del mercado, ofrece un control extremadamente fino (caché, reglas de reescritura, balanceo de carga, rate limiting) pero exige una gestión manual o mediante Certbot de los certificados. La elección enfrenta el automatismo moderno al dominio total y contrastado.",{"type":42,"title":43,"items":44},"ul","Lo que un buen frontal aporta a su VPS",[45,46,47,48,49,50,51],"Terminación TLS centralizada para todos sus subdominios","Reverse proxy único hacia varios contenedores Docker","Servicio de archivos estáticos rápido y compresión (gzip\u002Fbrotli)","Cabeceras de seguridad (HSTS, CSP, X-Content-Type-Options) aplicadas en un mismo punto","Con Caddy: certificados Let's Encrypt obtenidos y renovados automáticamente","Con Nginx: caché, rate limiting y balanceo de carga ajustados al detalle","HTTP\u002F3 y QUIC para reducir la latencia en conexiones degradadas",{"type":38,"title":53,"body":54},"Requisitos: un frontal frugal","Un reverse proxy es muy ligero: tanto Caddy como Nginx funcionan con holgura en 1 vCPU y de 512 MB a 1 GB de RAM, incluso como frontal de varios servicios. El recurso que hay que vigilar es más bien el ancho de banda y el número de conexiones simultáneas. Necesita un dominio y sus subdominios apuntando a la IP del VPS (registros A\u002FAAAA), los puertos 80 y 443 abiertos en el cortafuegos (el puerto 80 es necesario para la validación de los certificados) y Docker si contenedoriza el proxy. Ni GPU ni gran almacenamiento: aquí es la configuración la que marca la diferencia, no la potencia bruta.",{"type":56,"title":57,"steps":58},"steps","Implementar Caddy (o Nginx) como reverse proxy",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"Apuntar los DNS","Cree los registros A (y AAAA si usa IPv6) para cada subdominio (app, git, media) hacia la IP del VPS. La validación de Let's Encrypt fallará mientras la resolución DNS no sea efectiva, así que compruébela antes con `dig app.yourdomain.com` o una herramienta en línea.",{"title":63,"body":64},"Abrir los puertos 80 y 443","Autorice únicamente el 80 y el 443 en el cortafuegos (`ufw allow 80\u002Ftcp && ufw allow 443\u002Ftcp`). El puerto 80 sigue siendo imprescindible para el desafío HTTP de Let's Encrypt y para redirigir automáticamente el tráfico hacia HTTPS.",{"title":66,"body":67},"Redactar la configuración base","Con Caddy basta un bloque: `app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }` y el HTTPS es automático. Con Nginx, escriba un bloque `server` por subdominio con `proxy_pass` y las cabeceras `X-Forwarded-*`, y luego obtenga el certificado mediante Certbot: `certbot --nginx -d app.yourdomain.com`.",{"title":69,"body":70},"Configurar varios subdominios","Con Caddy, liste cada bloque en el mismo `Caddyfile`: `git.yourdomain.com { reverse_proxy 127.0.0.1:3001 }`. Con Nginx, cree un archivo por subdominio en `\u002Fetc\u002Fnginx\u002Fconf.d\u002F` o `\u002Fetc\u002Fnginx\u002Fsites-available\u002F`, y actívelo con `ln -s`. Ambos enfoques permiten gestionar docenas de servicios sin repetición.",{"title":72,"body":73},"Activar la compresión","Caddy activa gzip por defecto; para añadir brotli: `encode zstd br gzip` en el bloque del sitio. En Nginx, añada a `nginx.conf`: `gzip on; gzip_types text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fjavascript; gzip_min_length 256;`. La compresión reduce el tamaño de las respuestas de texto entre un 60 y un 80% en la mayoría de los casos.",{"title":75,"body":76},"Arrancar y recargar sin cortes","Inicie el servicio (`docker compose up -d` o `systemctl start caddy`). Después de cada modificación, valide la configuración (`nginx -t` o `caddy validate`) y luego recargue en caliente (`nginx -s reload` \u002F `caddy reload`) para no interrumpir nunca el tráfico.",{"title":78,"body":79},"Verificar los certificados","Con Caddy, ejecute `caddy validate --config \u002Fetc\u002Fcaddy\u002FCaddyfile` para detectar errores antes de recargar, y consulte los logs (`journalctl -u caddy -f`) para confirmar la emisión del certificado. Con Nginx + Certbot, `certbot certificates` lista las fechas de vencimiento y `certbot renew --dry-run` simula la renovación.",{"title":81,"body":82},"Reforzar la seguridad e implementar los logs","Active HSTS, oculte la versión del servidor (`server_tokens off` en Nginx, automático en Caddy), fuerce TLS 1.2+ y añada un rate limiting básico. Active los logs de acceso y de error, y vigile los códigos 502\u002F504 que revelan un contenedor inalcanzable detrás.",{"type":84,"body":85},"p","Una vez que el proxy está operativo y los certificados han sido emitidos, dos pasos complementarios refuerzan la seguridad y el rendimiento: la configuración avanzada de cabeceras y del rate limiting, y la implantación del monitoreo. El orden importa: valide primero que el enrutado básico funciona (`curl -I https:\u002F\u002Fapp.yourdomain.com`) antes de añadir capas de configuración.",{"type":38,"title":87,"body":88},"Configuración avanzada: seguridad, compresión y HTTP\u002F3","Una vez establecida la base, tres áreas mejoran concretamente la postura de su reverse proxy.\n\n**Cabeceras de seguridad.** Aplique a nivel del proxy las cabeceras que cada servicio posterior olvidará: `Strict-Transport-Security: max-age=31536000; includeSubDomains` (HSTS), `X-Content-Type-Options: nosniff`, `X-Frame-Options: SAMEORIGIN` y una `Content-Security-Policy` adaptada a su aplicación. Centralizar estas cabeceras en el proxy garantiza que cubran todos sus subdominios de un solo gesto.\n\n**Rate limiting.** En Caddy, el módulo `rate_limit` (disponible mediante `xcaddy build`) permite acotar las peticiones por IP. En Nginx, la directiva `limit_req_zone $binary_remote_addr zone=api:10m rate=30r\u002Fm;` en `http {}` y luego `limit_req zone=api burst=10 nodelay;` en el `location` correspondiente son suficientes para proteger una API contra abusos sin dependencias externas.\n\n**HTTP\u002F3 y QUIC.** Caddy activa HTTP\u002F3 por defecto en cuanto el puerto UDP 443 está abierto. Nginx admite QUIC desde la rama mainline (parámetro `quic` en el bloque `listen`); compruebe la versión instalada con `nginx -v` antes de activar la directiva. HTTP\u002F3 reduce la latencia percibida en conexiones móviles y redes con alta pérdida de paquetes, sin ningún cambio de comportamiento para los clientes que no lo admiten.",{"type":90,"title":91,"headers":92,"rows":96},"comparison","Caddy vs Nginx — tabla comparativa",[93,94,95],"Criterio","Caddy","Nginx",[97,101,105,109,113,117,121,125,129,133],[98,99,100],"HTTPS \u002F certificados","Automático, cero configuración","Manual o mediante Certbot",[102,103,104],"Sintaxis de configuración","Caddyfile, muy conciso","Más verbosa, muy expresiva",[106,107,108],"Curva de aprendizaje","Baja","De moderada a alta",[110,111,112],"Control fino (caché, rewrite, LB)","Bueno, a veces mediante plugins","Muy completo y contrastado",[114,115,116],"HTTP\u002F3 \u002F QUIC","Activo por defecto","Compatible (rama mainline)",[118,119,120],"Rate limiting nativo","Mediante módulo xcaddy","Integrado (`limit_req`)",[122,123,124],"Módulos dinámicos","Compilación mediante xcaddy","Módulos dinámicos (.so)",[126,127,128],"Uso de RAM en reposo","~30–50 MB","~20–40 MB (workers)",[130,131,132],"Formato de logs","JSON estructurado por defecto","Texto, configurable",[134,135,136],"Ideal para","Pasar rápido a HTTPS, multisubdominio","Ajustes avanzados, mucho tráfico",{"type":84,"body":138},"Los pasos de despliegue cubren la configuración ideal. En la práctica, varios tipos de errores aparecen con regularidad: un certificado bloqueado por una red intermedia, un servicio posterior que todavía no responde, o un contenedor Docker inaccesible desde el proxy porque ambos están en redes distintas. El panel más útil en estas situaciones es el log del proxy (`journalctl -u caddy -f` o `tail -f \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log`), combinado con `curl` en local para aislar el problema.",{"type":38,"title":140,"body":141},"Resolución de problemas: los errores más frecuentes","Incluso un proxy bien configurado produce errores al arrancar o bajo carga. Aquí están los cinco casos que aparecen con más frecuencia.\n\n**Caddy — «no certificate» detrás de un balanceador de carga.** Cuando Caddy está detrás de un balanceador que ya termina el TLS, no puede recibir el desafío HTTP-01 de Let's Encrypt y falla al emitir el certificado. Solución: usar el desafío DNS-01 mediante el plugin de su registrar (p. ej. `tls { dns cloudflare {env.CF_API_TOKEN} }`), o delegar completamente la gestión del TLS al balanceador y forzar que Caddy funcione en `http:\u002F\u002F` internamente.\n\n**Nginx — 502 Bad Gateway (timeout de upstream).** Un 502 persistente tras el arranque indica que el servicio posterior no está escuchando aún o ha fallado. Compruebe con `curl -v http:\u002F\u002F127.0.0.1:\u003Cpuerto>` desde el servidor. Si el servicio tarda en arrancar, aumente `proxy_read_timeout` y `proxy_connect_timeout`. Un 502 intermitente bajo carga apunta a una falta de conexiones keepalive: añada `keepalive 32;` en el bloque `upstream`.\n\n**Caddy con Docker — contenedor inaccesible.** Cuando Caddy y el servicio destino corren en redes Docker distintas, `reverse_proxy 127.0.0.1:3000` no funciona: `127.0.0.1` es la dirección de loopback del contenedor Caddy, no del host. Solución: conecte ambos contenedores a la misma red Docker bridge con nombre y use el nombre del servicio como dirección destino: `reverse_proxy nombre-del-servicio:3000`.\n\n**Nginx — «too many open files» bajo carga.** El error `worker_connections are not enough` o `open() failed (24: Too many open files)` aparece cuando el VPS recibe un pico de tráfico. Aumente el límite del sistema (`ulimit -n 65535` o `DefaultLimitNOFILE=65535` en la unit systemd) y alinee `worker_connections 4096;` en `nginx.conf`. El máximo de conexiones simultáneas es `worker_processes * worker_connections`.\n\n**Caddy — renovación bloqueada en silencio.** Caddy renueva en segundo plano, pero si el puerto UDP 443 está cerrado por el cortafuegos, HTTP\u002F3 falla y los logs pueden enmascarar la causa real. Monitorice `journalctl -u caddy -f` en torno a las fechas de renovación (60 días tras la emisión) y pruebe el desafío con `caddy run --config \u002Fetc\u002Fcaddy\u002FCaddyfile --watch` en primer plano para ver los errores en tiempo real.",{"type":143,"title":144,"body":145},"tip","Caddy, Nginx o Traefik: la tercera opción","Para una infraestructura con **numerosos microservicios Docker** y descubrimiento automático de contenedores, Traefik emerge como tercera opción: lee las etiquetas Docker (`traefik.http.routers.myapp.rule=Host(\"app.yourdomain.com\")`) y configura las rutas al vuelo sin recargas manuales. El inconveniente es su configuración más compleja y su documentación más densa. Caddy y Nginx siguen siendo las opciones naturales para un VPS de tamaño razonable (1 a 20 servicios); Traefik toma el relevo más allá, en especial en un contexto de Kubernetes o Docker Swarm. Para una comparación completa de los tres, consulte el artículo \u003Ca href=\"\u002Fblog\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx\">elegir su reverse proxy para VPS: Caddy, Traefik o Nginx\u003C\u002Fa>.",{"type":143,"title":147,"body":148},"Combinar ambos en lugar de elegir","Si todavía duda, sepa que Caddy y Nginx no se excluyen. Un patrón habitual coloca Caddy como primer frontal para gestionar automáticamente el TLS de todos sus subdominios, y deja Nginx detrás para la caché fina y las reglas de reescritura de un servicio concreto. Así combina el automatismo de los certificados con el dominio del ajuste, sin elegir un bando definitivo.","Un frontal HTTPS listo en unas pocas líneas","El VPS Cloud de ServOrbit con plantilla Docker le permite desplegar Caddy o Nginx como reverse proxy, con SSL automático para todos sus subdominios y servicios.","Configurar mi reverse proxy","\u002Fvps-cloud",[154,172,191],{"id":155,"slug":156,"slugs":157,"title":161,"excerpt":162,"readTime":163,"views":18,"isPinned":19,"publishedAt":164,"updatedAt":165,"category":166,"categories":167,"featuredImage":29,"bgImage":30,"posterImage":169,"relatedSolution":170},4,"coolify-vs-dokploy-que-herramienta-elegir-para-su-vps",{"fr":158,"en":159,"ar":160,"es":156},"coolify-vs-dokploy","coolify-vs-dokploy-which-tool-to-deploy-on-a-vps","coolify-مقابل-dokploy-أي-أداة-للنشر-على-vps","Coolify vs Dokploy: ¿qué herramienta elegir para su VPS?","Comparativa completa Coolify vs Dokploy: funciones, sencillez y casos de uso. ¿Qué herramienta elegir para alojar y desplegar sus aplicaciones en un VPS?",2,"2026-06-07T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[168],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fcoolify-vs-dokploy-poster.svg",{"categorySlug":33,"appSlug":171},"coolify",{"id":173,"slug":174,"slugs":175,"title":179,"excerpt":180,"readTime":181,"views":163,"isPinned":19,"publishedAt":182,"updatedAt":183,"category":184,"categories":185,"featuredImage":29,"bgImage":30,"posterImage":187,"relatedSolution":188},93,"n8n-vs-node-red-que-automatizacion-self-hosted-elegir",{"fr":176,"en":177,"ar":178,"es":174},"n8n-vs-node-red","n8n-vs-node-red-which-self-hosted-automation-tool-to-choose","n8n-مقابل-node-red-أي-أداة-أتمتة-مستضافة-ذاتيا-تختار","n8n vs Node-RED: ¿qué automatización self-hosted elegir?","¿n8n o Node-RED para automatizar sus flujos de trabajo en un VPS? Comparativa técnica, requisitos Docker y guía de despliegue self-hosted.",3,"2026-03-19T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[186],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fn8n-vs-node-red-poster.svg",{"categorySlug":189,"appSlug":190},"automatizacion","n8n",{"id":192,"slug":193,"slugs":194,"title":198,"excerpt":199,"readTime":200,"views":201,"isPinned":19,"publishedAt":202,"updatedAt":203,"category":204,"categories":205,"featuredImage":29,"bgImage":30,"posterImage":207,"relatedSolution":208},94,"supabase-vs-appwrite-que-backend-self-hosted-para-vps",{"fr":195,"en":196,"ar":197,"es":193},"supabase-vs-appwrite","supabase-vs-appwrite-which-self-hosted-backend-for-your-vps","supabase-مقابل-appwrite-أي-خلفية-مستضافة-ذاتيا-لـ-vps","Supabase vs Appwrite: ¿qué BaaS open source para su VPS?","Comparativa completa Supabase vs Appwrite: despliegue Docker, RAM necesaria, auth, funciones serverless, tiempo real y guía de elección para su VPS.",12,0,"2026-03-18T00:00:00+00:00","2026-09-16T14:44:15+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[206],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fsupabase-vs-appwrite-poster.svg",{"categorySlug":209,"appSlug":210},"bases-de-datos","supabase",1789665008914]