Caddy vs nginx: HTTPS, configuración y cuál elegir
Caddy vs nginx
Caddy vs nginx: HTTPS automático y configuración lado a lado | We.Inc
Caddy vs nginx en tareas reales: HTTPS automático, sitios estáticos, proxy inverso, balanceo de carga y WebSockets, con un generador que escribe ambas configuraciones para tu dominio.
La gran diferencia son los certificados. Caddy sirve cada sitio por HTTPS por defecto, obtiene y renueva los certificados de Let's Encrypt o ZeroSSL y redirige HTTP por ti. nginx necesita archivos de certificado que aportas tú, desde un cliente ACME o su módulo acme aparte. Los Caddyfile son más cortos; nginx ofrece un control más fino y una trayectoria mucho más larga.
Caddy y nginx comparados en tareas del día a día
Tarea
Caddy
Certificados HTTPS
Automáticos para cualquier dominio público de la configuración
Apuntas ssl_certificate a archivos, o añades el módulo aparte ngx_http_acme_module
Redirección de HTTP a HTTPS
Automática
Un bloque server en el puerto 80 que devuelve 301
Compresión
encode zstd gzip
gzip on
Proxy inverso
reverse_proxy localhost:3000
proxy_pass en un location, más cabeceras
WebSockets a través del proxy
Se gestionan automáticamente
Reenviar las cabeceras Upgrade y Connection
Balanceo de carga por defecto
round robin
Comprobaciones de salud activas
health_uri en reverse_proxy
health_check solo en la edición comercial
Comprobar y recargar la configuración
caddy validate, caddy reload
nginx -t, nginx -s reload
La mayoría de comparativas se quedan en las funciones. Aquí puedes escribir un dominio y un puerto de aplicación y obtener ambas configuraciones, para ver exactamente cuánto te pide escribir cada servidor para el mismo resultado. Debajo del generador hay fragmentos lado a lado para las tareas más habituales y, después, notas honestas sobre dónde encaja cada uno.
Introduce tu dominio y elige si el servidor debe servir archivos estáticos o reenviar las peticiones a una aplicación.
Activa o desactiva la compresión y la redirección de www para ver qué líneas necesita cada servidor.
Copia el Caddyfile junto al binario de caddy y ejecuta caddy run, o copia el bloque de nginx en un archivo de tu carpeta de sitios.
Para nginx, obtén primero un certificado con tu cliente ACME y actualiza las dos rutas de certificado antes de recargar.
Caddy solo puede obtener un certificado público si el registro A o AAAA del dominio apunta a la máquina y los puertos 80 y 443 son accesibles desde fuera.
Dale a Caddy almacenamiento persistente y con permisos de escritura para su directorio de datos. En contenedores, monta un volumen o pedirá certificados nuevos en cada reinicio.
Ejecuta caddy fmt sobre los Caddyfile editados a mano; ordena la sangría siempre de la misma forma.
En nginx, prueba con nginx -t antes de cada recarga. Comprueba la sintaxis y además intenta abrir los archivos a los que se refiere la configuración, como las rutas de certificados.
Desde Caddy 2.8 la directiva root ya no necesita el matcher *, así que root /srv funciona. Las guías antiguas que escriben root * /srv siguen siendo válidas.
Preguntas frecuentes
¿Caddy sustituye directamente a nginx?
Para sitios estáticos, proxys inversos y balanceo de carga sencillo, normalmente sí, y la configuración se acorta. Las instalaciones grandes de nginx que usan muchos módulos de terceros, lógica compleja de map y rewrite o caché ajustada pueden no tener un equivalente directo en Caddy, así que traduce y prueba un sitio cada vez.
¿nginx ya hace HTTPS automático?
nginx tiene un ngx_http_acme_module que implementa ACME, pero no se compila por defecto. Lo instalas como un módulo dinámico aparte (el paquete nginx-module-acme) y configuras un emisor. Sin él, los certificados vienen de un cliente externo.
¿Puede Caddy darme HTTPS en localhost?
Sí. Para localhost y nombres internos, Caddy crea su propia autoridad de certificación local y emite certificados con ella. Puede que tu sistema te pida una vez que confíes en su certificado raíz.
¿Cuál tiene mejor rendimiento?
No publicamos cifras de velocidad porque varían con el hardware, los ajustes de TLS y la carga de trabajo. Ambos manejan con holgura sitios web y API típicos. Si el rendimiento bruto te importa, haz un benchmark con tu propio patrón de tráfico en tus propios servidores.
¿Caddy admite balanceo de carga y comprobaciones de salud?
Sí. Enumera varios upstreams en reverse_proxy, elige un lb_policy como round_robin o least_conn y añade health_uri para comprobaciones activas o fail_duration para las pasivas. Sin política, Caddy elige los upstreams al azar.
Qué cubre realmente el HTTPS automático
Cuando un Caddyfile nombra un dominio público, Caddy obtiene un certificado mediante ACME, sirve el sitio en el 443, redirige el puerto 80 a HTTPS y renueva el certificado en segundo plano. Si un emisor falla, lo reintenta y puede recurrir a otro. Nada en la configuración menciona TLS salvo que quieras cambiar los valores por defecto.
nginx te deja esto a ti. Lo habitual es un cliente ACME que escribe los archivos de certificado y recarga nginx tras renovarlos, o el módulo acme más reciente que instalas a propósito.
Cuándo encaja mejor nginx
nginx está en todas partes: en distribuciones, imágenes de contenedores y paneles de hosting, con documentación y respuestas para casi cualquier situación. Los equipos que ya lo usan, dependen de módulos concretos o necesitan un control fino del buffering y la caché tienen pocos motivos para cambiar.
Cuándo encaja mejor Caddy
Los equipos pequeños, los proyectos personales y quienes gestionan muchos dominios son los que más ganan al no tener que ocuparse de certificados. Su formato de configuración nativo es JSON, que caddy adapt genera a partir de un Caddyfile, y caddy reload envía una configuración nueva al proceso en marcha mediante su API de administración sin tiempo de inactividad.
Balanceo de carga entre tres servidores de aplicación
Caddyfile
Round robin entre tres backends, con comprobaciones de salud en segundo plano contra /healthz.
Round robin es el valor por defecto. nginx de código abierto solo comprueba la salud de forma pasiva, mediante las peticiones fallidas.
Proxy de WebSockets
Caddyfile
reverse_proxy realiza el upgrade y mantiene abierto un túnel bidireccional sin líneas extra.
Las cabeceras Upgrade y Connection deben reenviarse explícitamente; proxy_http_version 1.1 es necesario antes de nginx 1.29.7.