ماذا يعني: „فقدان الاتصال بالخادم

وصف المشكلة/الخطأ/السؤال

في كل مرة أحاول تنفيذ سير عمل، أتلقى خطأ “فقدت الاتصال بالخادم”، وكل شيء يتوقف/يتعطل. يستمر زر “Execute Workflow” في “الدوران”، لكن لا يحدث شيء آخر، وزر الإيقاف يبدو أنه لا يوقف أي شيء.

كان يعمل بشكل جيد في الأصل، لكنه توقف عن العمل فقط.

أنا لست متأكداً بنسبة 100٪، لكن قد يكون قد بدأ بعد أن أنشأت سير عمل ثانياً، وحاولت البدء في بنائه.

حاولت إيقاف حاوية Docker، وسحب صور جديدة، وإعادة التشغيل.
حاولت إعادة تشغيل الخادم.

ما رسالة الخطأ (إن وجدت)؟

“Problem running workflow: Lost connection to the server”

يرجى مشاركة سير عملك

مشاركة الإخراج الذي أرجعته آخر عقدة

معلومات حول إعداد n8n الخاص بك

[details="معلومات المثيل"]
# معلومات التصحيح

## core

- n8nVersion: 2.35.7
- platform: docker (self-hosted)
- nodeJsVersion: 24.18.1
- nodeEnv: production
- database: sqlite
- executionMode: regular
- concurrency: -1
- license: enterprise (production)
- consumerId: 043bc9a2-6f65-4ab4-af4c-3352eb5892d0

## storage

- success: all
- error: all
- progress: false
- manual: true
- binaryMode: filesystem

## pruning

- enabled: true
- maxAge: 336 hours
- maxCount: 10000 executions

## client

- userAgent: mozilla/5.0 (x11; linux x86_64; rv:153.0) gecko/20100101 firefox/153.0
- isTouchDevice: false

## cluster

- instanceCount: 1
- versions: 2.35.7
- instances:
  - instanceKey: 2acda12d-b93e-42eb-a9d2-f8fafc920e37, hostId: main-588df7525b64, instanceType: main, instanceRole: leader, version: 2.35.7
- checks:
  - check: hostid-clash, status: succeeded, warnings: -
  - check: lifecycle, status: succeeded, warnings: -
  - check: split-brain, status: succeeded, warnings: -
  - check: version-mismatch, status: succeeded, warnings: -

Generated at: 2026-08-21T21:03:40.200Z
[/details]
  • n8n version: انظر أعلاه
  • Database (default: SQLite): انظر أعلاه
  • n8n EXECUTIONS_PROCESS setting (default: own, main): انظر أعلاه
  • Running n8n via (Docker, npm, n8n cloud, desktop app): انظر أعلاه
  • Operating system: Ubuntu 26.04 LTS server

مرحباً @funkywaddle

خطأ “فقدان الاتصال بالخادم” وعدم استجابة واجهة المستخدم هما أعراض تعطل عملية n8n، على الأرجح بسبب حدث نقص الذاكرة (OOM). عندما يتم إيقاف عملية n8n بواسطة نظام التشغيل أو Docker لتجاوزها حدود الذاكرة، يتم قطع اتصال WebSocket بين متصفحك والخادم فوراً. يؤدي هذا إلى تعليق المحرر في حالة “دوران” لأن الواجهة الخلفية التي كان يتواصل معها لم تعد موجودة.

سير عملك المحدد يشير إلى عقدة الكود باعتبارها المسبب الرئيسي. السطر JSON.parse(item.json.data) خطير بشكل خاص؛ إذا احتوت طلب HTTP الوارد على حمولة كبيرة، فإن محاولة تحليل تلك السلسلة بأكملها إلى كائن JavaScript ستسبب ارتفاعاً حاداً وفوري في استخدام الذاكرة. هذا الارتفاع هو على الأرجح ما يدفع حاوية Docker الخاصة بك إلى تجاوز الحد المخصص لها ويؤدي إلى التعطل.

للحل، أولاً تأكد من التعطل بفحص سجلات Docker الخاصة بك عن رسائل “OOM Killed”. بعد ذلك، قم بتحسين سير عملك بإزالة استدعاء JSON.parse الزائد، حيث يتعامل n8n عادةً مع تحليل JSON تلقائياً في عقدة HTTP Request. أخيراً، إذا كانت مهامك تتطلب بطبيعتها معالجة مجموعات بيانات كبيرة، فيجب عليك زيادة حدود الذاكرة المخصصة لحاوية Docker الخاصة بك بواسطة n8n في ملف docker-compose أو تكوين وقت التشغيل الخاص بك.

شكراً على ردك.

تحققت من سجلات docker وبدا أن هناك بعض الأخطاء/التحذيرات، لكنني لا أرى أي أخطاء Out of Memory (OOM) أو رسائل OOM Killed.

فيما يلي مخرجات السجلات. السطر الأول يوضح فقط مخرجات docker ps الخاصة بي.
بعد ذلك السجلات، والسجلات تتكرر، (لم أنسخ التكرار)

funky@localhost:~/docker/n8n$ docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED       STATUS       PORTS                                                                          NAMES
588df7525b64   docker.n8n.io/n8nio/n8n   "tini -- /docker-ent…"   9 hours ago   Up 8 hours   127.0.0.1:5678->5678/tcp                                                       n8n-n8n-1
a9c91a1c2b85   traefik                   "/entrypoint.sh --ap…"   9 hours ago   Up 8 hours   0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp   n8n-traefik-1
funky@localhost:~/docker/n8n$ docker logs n8n-n8n-1
Initializing n8n process
Failed to load Custom API options for the node "n8n-nodes-base.confluence": Unknown credential name "confluenceCloudOAuth2Api"
n8n ready on ::, port 5678
n8n Task Broker ready on 127.0.0.1, port 5679
Failed to start Python task runner in internal mode. because Python 3 is missing from this system. Launching a Python runner in internal mode is intended only for debugging and is not recommended for production. Users are encouraged to deploy in external mode. See: https://docs.n8n.io/hosting/configuration/task-runners/#setting-up-external-mode

There are deprecations related to your n8n setup. Please take the recommended actions to update your configuration:
 - WEBHOOK_URL -> Use N8N_WEBHOOK_URL instead, which sets the base URL for both test and production webhooks.
 - N8N_UNVERIFIED_PACKAGES_ENABLED -> The default for this variable will change to `false` in a future version. Set it to `true` explicitly to keep installing unverified community packages.
 - N8N_RUNNERS_TASK_TIMEOUT -> The default for this variable will be reduced from 300 (5 minutes) to 60 (1 minute) in a future version. Set it explicitly to keep your current task timeout.
 - N8N_COMPRESSION_NODE_MAX_DECOMPRESSED_SIZE_BYTES -> The default for this variable will be reduced from 2 GiB to 256 MiB in a future version. Set it explicitly to keep your current limit.
 - N8N_COMPRESSION_NODE_MAX_ZIP_ENTRIES -> The default for this variable will be reduced from 5000 to 1000 in a future version. Set it explicitly to keep your current limit.

[license SDK] cert state: expiresAt=2026-08-31T18:44:05.209Z terminatesAt=2051-08-15T03:47:52.208Z issuedAt=2026-08-21T18:44:05.252Z msToExpiry=863867504 msToTermination=788346094503 isValid=true isRenewalDue=false detachedEntitlementsCount=0 entitlements=1 enabledFeatures=6
[license SDK] Skipping renewal on init: license cert is not due for renewal
Registered runner "JS Task Runner" (ufk2CcHyBsdLhz5NB6Gh4) 
Instance registered
Discovered 4 cluster checks
Failed to load Custom API options for the node "n8n-nodes-base.confluence": Unknown credential name "confluenceCloudOAuth2Api"
Sandbox: enabled=false provider=n8n-sandbox (from env)
Failed to load Custom API options for the node "n8n-nodes-base.confluence": Unknown credential name "confluenceCloudOAuth2Api"
Version: 2.35.7
Building workflow dependency index...
Finished building workflow dependency index. Processed 0 draft workflows, 0 published workflows.
Start Active Workflows:
Activated workflow "Weather Forecast Email" (ID: nwHyxnI7Gtewjif2)

Editor is now accessible via:
https://[redacted]
(node:7) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
    at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:371:13)
    at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:685:22)
    at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:788:20)
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:849:32
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:830:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}
ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
    at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:371:13)
    at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:685:22)
    at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:788:20)
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:849:32
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:830:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}
ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
    at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:371:13)
    at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:685:22)
    at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:788:20)
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:849:32
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:830:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}
ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
    at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:371:13)
    at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:685:22)
    at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:788:20)
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:849:32
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:830:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}
[license SDK] cert state: expiresAt=2026-08-31T19:04:07.548Z terminatesAt=2051-08-15T03:47:52.208Z issuedAt=2026-08-21T19:04:07.583Z msToExpiry=863999783 msToTermination=788345024443 isValid=true isRenewalDue=false detachedEntitlementsCount=0 entitlements=1 enabledFeatures=6
[license SDK] license successfully renewed (cause=request, expiresAt: 2026-08-31T18:44:05.209Z -> 2026-08-31T19:04:07.548Z, entitlements: 1 -> 1)
[license SDK] cert state: expiresAt=2026-08-31T19:19:15.401Z terminatesAt=2051-08-15T03:47:52.208Z issuedAt=2026-08-21T19:19:15.463Z msToExpiry=863999727 msToTermination=788344116534 isValid=true isRenewalDue=false detachedEntitlementsCount=0 entitlements=1 enabledFeatures=6
[license SDK] license successfully renewed (cause=request, expiresAt: 2026-08-31T19:04:07.548Z -> 2026-08-31T19:19:15.401Z, entitlements: 1 -> 1)
Received SIGTERM. Shutting down...
Deregistered all crons
[runner:js] Received SIGTERM signal, shutting down...
[runner:js] Task runner stopped

Stopping n8n...

سأرى ما يمكنني فعله بشأن حدود الذاكرة.
مجموعة البيانات ليست كبيرة جداً، فقط توقعات الطقس. لكن يجب أن أقول، يأتي item.json كقيمة (object)، لكن كل ما يحتويه هو data والحمولة الفعلية عبارة عن سلسلة نصية كبيرة (بصيغة json، لكنها stringified)، لذلك أحتاج إلى json.parse لتحليل item.json.data.

@funkywaddle هل تستخدم خادم وكيل عكسي للوصول إلى n8n أم أنك تتصل بـ localhost؟

السبب الأكثر شيوعًا لفقدان الاتصال في الحالات المستضافة ذاتيًا هو عدم تكوين خوادم الوكيل العكسية بشكل صحيح، عادةً عند استخدام nginx أو Apache.

يجب عليك تعيين هذا

environment:
  N8N_TRUST_PROXY: "true"

أو

environment:
 - N8N_TRUST_PROXY=true 

@Jon نعم، أنا أستخدم reverse proxy مع Nginx.
إنه إعداد معقد قليلاً، لكن على صندوق الخادم نفسه، أستخدم Nginx لفتحه على المنفذ 8042، ثم أستخدم npm (Nginx Proxy Manager) على خادم آخر للتعامل مع شهادة Let’s Encrypt وإعادة توجيه المنفذ 80 على صندوقه إلى المنفذ 8042 على صندوق تشغيل n8n. لدي عدة نطاقات ونطاقات فرعية، وأقوم بتشغيلها جميعاً من خلال npm. من الأسهل بهذه الطريقة، لإدارة شهادات LE، وفي مكان واحد شامل للإدارة.

إنها فكرة جيدة، لكنني لا أعتقد أنها مشكلة في إعداد خادم الوكيل. إذا كانت كذلك، فلماذا كانت تعمل في البداية (عندما أنشأت سير العمل الأول)، ثم بدأت تتصرف بغرابة بعد ذلك؟

@kjooleng لقد أضفت هذا الإعداد للتو إلى ملف composer.yml الخاص بي، قمت بـ down، ثم pull، ثم up.
لا أزال أحصل على نفس الخطأ. إنه لا يزال يعرض عدة حالات من الخطأ:

ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
    at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:371:13)
    at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:685:22)
    at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:788:20)
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:849:32
    at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0/node_modules/express-rate-limit/dist/index.cjs:830:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}

مرحبا @funkywaddle أهلا وسهلا!
كتلة nginx الخاصة بك لا تحتوي على ترقية websocket، لذلك اتصال الدفع الخاص بمحرر البيانات في /rest/push لا يمر أبدا. يقوم nginx بتوكيل المصب عبر HTTP/1.0 افتراضيا وينزل رؤوس hop-by-hop، وخادم الدفع الخاص بـ n8n هو websocket ما لم تغيره. أضف هذه بداخل location /، جنبا إلى جنب مع الرؤوس التي لديك بالفعل:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

مضيف Nginx Proxy Manager الموجود في الأمام يحتاج أيضا إلى تفعيل دعم Websockets، وإلا فإن الترقية ستموت في هذا القفزة بدلا من ذلك.
بخصوص سطر X-Forwarded-For الذي لا يزال في سجلاتك، المتغير الموثق هو N8N_PROXY_HOPS ويأخذ عدد الوكلاء بدلا من قيمة منطقية، لذلك 2 لسلسلتك.

@Anshul_Namdev شكراً لك كثيراً.

في الواقع، شكراً لكل من ساهم في المساعدة.

لست متأكداً إذا كان أحد التغييرات أو جميع التغييرات التي قدمتموها هي التي حلّت المشكلة، لكن الجولة الأخيرة (من @Anshul_Namdev) جعلتها تعمل.

لا أزال مرتبكاً بشأن السبب الذي جعلها تعمل في البداية، لكنني لا أتفحص الهدية بدقة. إنها تعمل، وأنا سعيد.

شكراً لكم جميعاً.