"Conexión perdida con el servidor" en editor + error WebSocket "Invalid origin" detrás del proxy inverso de Plesk

Hola a todos,

Estoy ejecutando n8n autohospedado mediante Docker Compose detrás de Plesk (Ubuntu 20.04,
Plesk Obsidian 18.0.78), con nginx como proxy inverso frente a Docker.

Configuración:

  • Imagen oficial de Docker de n8n (n8nio/n8n)
  • Proxy inverso: nginx de Plesk (redirigiendo a Apache, luego al contenedor Docker
    en el puerto 5678)
  • Dominio: subdominio con su propio certificado SSL (Let’s Encrypt vía Plesk)

Variables de entorno ya configuradas:
N8N_HOST=bot.publicides.com
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://bot.publicides.com/
N8N_SECURE_COOKIE=false
N8N_TRUST_PROXY=true
N8N_PROXY_HOPS=2
N8N_PUSH_BACKEND=sse
N8N_EDITOR_BASE_URL=https://bot.publicides.com/

Directivas adicionales de nginx ya añadidas:
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_pass_request_headers on;

Problema:
Cualquier acción del editor en vivo (Ejecutar nodos anteriores, Probar este disparador, incluso
simplemente abrir la pestaña Ejecuciones) falla con “Problema al ejecutar el flujo de trabajo —
Conexión perdida con el servidor” en la interfaz.

Los registros de Docker muestran este error que se repite:

Origin header does NOT match the expected origin. (Origin: “undefined”
→ “N/A”, Expected: “undefined” → “undefined”, Protocol: “undefined”)
ResponseError: Invalid origin!
at Push.handleRequest (/usr/local/lib/node_modules/n8n/src/push/index.ts:157:10)
at /usr/local/lib/node_modules/n8n/src/push/index.ts:112:17
at Layer.handleRequest (…router/lib/layer.js:152:17)

at /usr/local/lib/node_modules/n8n/src/auth/auth.service.ts:158:18

Lo que ya he descartado:

  • Los recursos del servidor están bien (RAM ≈72% utilizada pero mucho espacio disponible, CPU baja,
    uso de disco bajo)
  • No es un problema del navegador/caché — mismo error en modo incógnito, navegador diferente, dispositivo diferente,
    y datos móviles en lugar de WiFi
  • El contenedor de Docker está activo y saludable (docker ps confirma “Up”)
  • Los webhooks funcionan perfectamente — un POST curl manual a la URL de webhook de producción
    devuelve {“message”:“Webhook call received”} y el flujo de trabajo se ejecuta
    correctamente de principio a fin (confirmado por la actualización de la hoja de Google de destino)
  • El dominio NO está proxificado a través de Cloudflare (solo DNS / nube gris)

Entonces, la ejecución real del flujo de trabajo vía webhook funciona perfectamente — solo la
conexión push WebSocket/SSE del editor en vivo falla, aparentemente rechazada
debido a una discrepancia del encabezado Origin en algún lugar entre nginx y el
servicio de autenticación de n8n.

¿Alguien ha encontrado este error específico de push “Invalid origin” con
la configuración de nginx de Plesk? ¿Hay alguna variable de entorno adicional o directiva nginx
necesaria para reenviar/establecer correctamente el encabezado Origin para el punto final push?

¡Gracias de antemano!

¡Hola @Alcides_Home_360_Bel! ¡Bienvenido!
n8n 1.87+ añadió una verificación estricta de Origin en el endpoint push (/rest/push), y tu log mostrando Origin, Expected y Protocol todos como «undefined» significa que el header Origin se está eliminando antes de llegar a n8n, por lo que la verificación rechaza la conexión push mientras que los webhooks, que no tienen tal verificación, siguen funcionando. Las variables de entorno como N8N_DISABLE_ORIGIN_CHECK se reportan ampliamente que no funcionan una vez que el header ya se ha eliminado, así que la solución real es inyectar el header Origin, con el esquema, en el salto del proxy más cercano a n8n.
En tu cadena Plesk ese salto es Apache, no el nginx frontal. Otro usuario de Plesk configuró Origin solo en las directivas de nginx y aún vio «Origin: undefined» porque la capa Apache entre medio la elimina. Así que configúralo en las directivas de Apache (Websites & Domains, Apache & nginx Settings, Additional Apache directives) con mod_headers:
Ve esto:

Usa https://bot.publicides.com como valor, y añade también RequestHeader set X-Forwarded-Proto "https", ya que tu log muestra que Protocol también es undefined. Mantener N8N_PUSH_BACKEND=sse está bien; la verificación se aplica tanto a SSE como a WebSocket, así que SSE solo no la omite.
Si prefieres no tocar Apache, desmarca «Proxy mode» en la misma sección Apache & nginx Settings para que nginx proxee directamente al contenedor, entonces tu bloque nginx existente más proxy_set_header Origin https://bot.publicides.com; llega directamente a n8n.