« Connexion au serveur perdue » dans l'éditeur + erreur WebSocket « Invalid origin » derrière le reverse proxy Plesk

Bonjour à tous,

J’exécute n8n auto-hébergé via Docker Compose derrière Plesk (Ubuntu 20.04,
Plesk Obsidian 18.0.78), avec nginx comme proxy inverse devant Docker.

Configuration :

  • Image Docker officielle n8n (n8nio/n8n)
  • Proxy inverse : nginx de Plesk (proxying vers Apache, puis vers le conteneur
    Docker sur le port 5678)
  • Domaine : sous-domaine avec SSL propre (Let’s Encrypt via Plesk)

Variables d’environnement déjà définies :
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/

Directives nginx supplémentaires déjà ajoutées :
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;

Problème :
Toute action de l’éditeur en direct (Exécuter les nœuds précédents, Tester ce déclencheur, même
juste l’ouverture de l’onglet Exécutions) échoue avec « Problème lors de l’exécution du workflow —
Connexion perdue avec le serveur » dans l’interface utilisateur.

Les journaux Docker affichent cette erreur qui se répète :

L’en-tête Origin ne correspond PAS à l’origine attendue. (Origin: « undefined »
→ « N/A », Attendu: « undefined » → « undefined », Protocole: « 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

Ce que j’ai déjà écarté :

  • Les ressources du serveur vont bien (~72 % de RAM utilisée mais beaucoup de marge, CPU faible,
    utilisation disque faible)
  • Ce n’est pas un problème de navigateur/cache — même erreur en mode incognito, différents
    navigateurs, différents appareils, et données mobiles au lieu du WiFi
  • Le conteneur Docker est actif et sain (docker ps confirme « Up »)
  • Les webhooks fonctionnent parfaitement — une requête curl POST manuelle vers l’URL de webhook en production
    retourne {“message”:“Webhook call received”} et le workflow s’exécute
    correctement d’un bout à l’autre (confirmé par la mise à jour du Google Sheet cible)
  • Le domaine n’est PAS proxifié via Cloudflare (DNS uniquement / nuage gris)

Donc l’exécution du workflow via webhook fonctionne parfaitement — seule la
connexion push WebSocket/SSE de l’éditeur en direct échoue, apparemment rejetée
à cause d’une incompatibilité d’en-tête Origin quelque part entre nginx et le
service d’authentification de n8n.

Quelqu’un a-t-il rencontré cette erreur « Invalid origin » push spécifique avec
la configuration nginx de Plesk ? Y a-t-il une variable d’environnement supplémentaire ou une directive nginx
né cessaire pour transférer/définir correctement l’en-tête Origin pour le point de terminaison push ?

Merci d’avance !

Salut @Alcides_Home_360_Bel Bienvenue !
n8n 1.87+ a ajouté une vérification stricte de l’Origin sur le point de terminaison push (/rest/push), et votre journal affichant Origin, Expected et Protocol tous « undefined » signifie que l’en-tête Origin est supprimé avant d’atteindre n8n, donc la vérification rejette la connexion push tandis que les webhooks, qui n’ont pas une telle vérification, continuent de fonctionner. Les bascules d’env comme N8N_DISABLE_ORIGIN_CHECK sont largement signalées comme ne faisant rien une fois que l’en-tête est déjà parti, donc la véritable correction consiste à injecter l’en-tête Origin, avec le schéma, au saut du proxy le plus proche de n8n.
Dans votre chaîne Plesk, ce saut est Apache, pas le nginx frontal. Un autre utilisateur de Plesk a défini Origin uniquement dans les directives nginx et a toujours vu « Origin: undefined » parce que la couche Apache entre les deux la supprime. Définissez-la donc dans les directives Apache (Websites & Domains, Apache & nginx Settings, Additional Apache directives) avec mod_headers :
Voir ceci :

Utilisez https://bot.publicides.com comme valeur, et ajoutez également RequestHeader set X-Forwarded-Proto "https", puisque votre journal montre que Protocol est undefined aussi. Garder N8N_PUSH_BACKEND=sse va bien ; la vérification s’applique à SSE et WebSocket de la même manière, donc SSE seul ne l’ignore pas.
Si vous préférez ne pas toucher à Apache, décochez « Proxy mode » dans les mêmes Apache & nginx Settings afin que nginx fasse un proxy direct vers le conteneur, puis votre bloc nginx existant plus proxy_set_header Origin https://bot.publicides.com; atteint n8n directement.