n8n con Caddy como Reverse Proxy: Configuración Fácil con HTTPS Automático

N8n con Caddy reverse proxy es uno de los usos más prácticos de n8n. Si has configurado Nginx como reverse proxy para n8n y te ha parecido complicado, n8n con Caddy es la alternativa perfecta. Caddy configura HTTPS automáticamente sin necesidad de Certbot, con una sintaxis de configuración mucho más limpia y sencilla.

¿Por qué usar Caddy en lugar de Nginx para n8n?

Caddy tiene varias ventajas frente a Nginx cuando lo usas como reverse proxy para n8n:

  • HTTPS automático: obtiene y renueva certificados Let's Encrypt sin ninguna configuración extra
  • Configuración más simple: un Caddyfile es mucho más legible que un virtualhost de Nginx
  • WebSockets por defecto: Caddy soporta WebSockets sin configuración adicional
  • HTTP/2 y HTTP/3: activados automáticamente para mejor rendimiento

Requisitos

  • Un VPS o servidor con Ubuntu/Debian
  • Docker y Docker Compose instalados
  • Un dominio apuntando a la IP del servidor
  • Puerto 80 y 443 abiertos en el firewall

Estructura del proyecto

/opt/n8n/
├── docker-compose.yml
├── Caddyfile
└── .env

docker-compose.yml con Caddy y n8n

version: "3.8"

services:
  caddy:
    image: caddy:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

  n8n:
    image: n8nio/n8n
    restart: always
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://${DOMAIN}/
      - GENERIC_TIMEZONE=Europe/Madrid
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  n8n_data:

Nota: n8n no expone el puerto 5678 directamente porque Caddy se comunica con él por la red interna de Docker.

Caddyfile: la configuración más simple posible

Crea el archivo Caddyfile en /opt/n8n/:

n8n.tudominio.com {
    reverse_proxy n8n:5678
}

Eso es todo. Con estas tres líneas, Caddy:

  • Obtiene automáticamente el certificado SSL de Let's Encrypt
  • Configura HTTPS y redirige HTTP a HTTPS
  • Hace proxy de todas las peticiones a n8n, incluyendo WebSockets

Archivo .env

DOMAIN=n8n.tudominio.com
N8N_ENCRYPTION_KEY=tu_clave_aleatoria_de_32_chars

Arrancar n8n con Caddy

cd /opt/n8n
docker compose up -d

# Ver que Caddy obtiene el certificado correctamente
docker compose logs -f caddy

En los logs verás algo como:

certificate obtained successfully
serving initial configuration

Accede a https://n8n.tudominio.com y verás n8n con HTTPS funcionando.

Caddyfile avanzado con cabeceras de seguridad

Para una configuración más robusta de n8n con Caddy, añade cabeceras de seguridad:

n8n.tudominio.com {
    reverse_proxy n8n:5678

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "SAMEORIGIN"
        -Server
    }

    log {
        output file /var/log/caddy/n8n.log
    }
}

Comparativa: Caddy vs Nginx para n8n

Característica Caddy Nginx
HTTPS automático ✅ Incluido ❌ Requiere Certbot
WebSockets ✅ Automático ⚠️ Configuración manual
Sintaxis ✅ Muy simple ❌ Más compleja
Rendimiento ✅ Excelente ✅ Excelente
Documentación ✅ Buena ✅ Muy extensa

Para un servidor dedicado a n8n, Caddy es claramente la mejor opción por su simplicidad. Nginx sigue siendo preferible si ya lo usas para otros servicios en el mismo servidor.

Conclusión

Configurar n8n con Caddy es significativamente más sencillo que con Nginx. Un Caddyfile de tres líneas te da HTTPS automático, soporte de WebSockets y un reverse proxy completamente funcional. Si estás instalando n8n desde cero, Caddy te ahorrará tiempo y dolores de cabeza con los certificados SSL.