"فقدان الاتصال بالخادم" في المحرر + خطأ WebSocket "أصل غير صالح" خلف بروكسي عكسي Plesk

مرحبا بالجميع،

أقوم بتشغيل n8n محليًا عبر Docker Compose خلف Plesk (Ubuntu 20.04،
Plesk Obsidian 18.0.78)، مع nginx كخادم وكيل عكسي أمام Docker.

الإعداد:

  • صورة n8n الرسمية على Docker (n8nio/n8n)
  • الخادم الوكيل العكسي: nginx من Plesk (يتوسط إلى Apache، ثم إلى حاوية Docker
    على المنفذ 5678)
  • النطاق: نطاق فرعي مع شهادة SSL خاصة به (Let’s Encrypt عبر Plesk)

متغيرات البيئة المعينة بالفعل:
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/

توجيهات nginx الإضافية المضافة بالفعل:
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;

المشكلة:
أي إجراء محرر مباشر (Execute previous nodes، Test this trigger، حتى
فقط فتح علامة التبويب Executions) يفشل مع “Problem running workflow —
Lost connection to the server” في واجهة المستخدم.

سجلات Docker تعرض هذا الخطأ المتكرر:

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

ما استبعدته بالفعل:

  • موارد الخادم جيدة (RAM ~72% مستخدم لكن هناك مساحة كبيرة، CPU منخفض،
    استخدام قرص منخفض)
  • ليست مشكلة المتصفح/الذاكرة المؤقتة — نفس الخطأ في وضع التصفح المتخفي، متصفح مختلف،
    جهاز مختلف، وبيانات الهاتف المحمول بدلاً من WiFi
  • حاوية Docker تعمل وسليمة (docker ps يؤكد “Up”)
  • Webhooks تعمل بشكل جيد — POST curl يدوي إلى عنوان URL webhook الإنتاج
    يعيد {“message”:“Webhook call received”} وسير العمل ينفذ
    بشكل صحيح من البداية إلى النهاية (تم التأكد من تحديث جدول Google Sheet الهدف)
  • النطاق NOT من خلال Cloudflare (DNS فقط / grey cloud)

لذلك تنفيذ سير العمل الفعلي عبر webhook يعمل بشكل مثالي — فقط
اتصال WebSocket/SSE push المحرر المباشر يفشل، يبدو أنه مرفوض
بسبب عدم تطابق رأس Origin في مكان ما بين nginx وخدمة auth من n8n.

هل واجه أي شخص هذا الخطأ “Invalid origin” push المحدد مع
إعداد nginx من Plesk؟ هل هناك متغير env أو توجيه nginx إضافي
مطلوب لإعادة توجيه/تعيين رأس Origin بشكل صحيح لنقطة النهاية push؟

شكرا مقدما!

مرحباً @Alcides_Home_360_Bel أهلاً وسهلاً!
n8n 1.87+ أضافت فحص Origin صارم على نقطة الدفع (/rest/push)، وسجلك يظهر Origin وExpected وProtocol جميعها “undefined” يعني أن رأس Origin يتم حذفه قبل وصوله إلى n8n، لذا يرفض الفحص اتصال الدفع بينما webhooks، التي ليس لديها مثل هذا الفحص، تستمر في العمل. متغيرات البيئة مثل N8N_DISABLE_ORIGIN_CHECK يتم الإبلاغ عنها على نطاق واسع بأنها لا تفعل شيئاً بمجرد اختفاء الرأس، لذا الحل الحقيقي هو حقن رأس Origin، مع المخطط، في قفزة الوسيط الأقرب إلى n8n.
في سلسلة Plesk الخاصة بك تلك القفزة هي Apache، وليس nginx الأمامي. قام مستخدم Plesk آخر بتعيين Origin فقط في توجيهات nginx ولا يزال يرى “Origin: undefined” لأن طبقة Apache بينهما تسقطه. لذا عيّنه في توجيهات Apache (Websites & Domains، Apache & nginx Settings، Additional Apache directives) باستخدام mod_headers:
انظر إلى هذا:

استخدم https://bot.publicides.com كقيمة، وأضف أيضاً RequestHeader set X-Forwarded-Proto "https"، لأن سجلك يظهر Protocol undefined أيضاً. الاحتفاظ بـ N8N_PUSH_BACKEND=sse بخير؛ الفحص ينطبق على SSE و WebSocket على حد سواء، لذا SSE وحده لا يتخطى ذلك.
إذا كنت تفضل عدم لمس Apache، قم بإلغاء تحديد “Proxy mode” في إعدادات Apache و nginx نفسها لذا يوكل nginx مباشرة إلى الحاوية، ثم كتلة nginx الموجودة لديك بالإضافة إلى proxy_set_header Origin https://bot.publicides.com; يصل إلى n8n مباشرة.