502 مدخل غير صالح - إنهاء الاتصال

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يتلقّى تطبيق العميل رمز حالة HTTP لـ 502 Bad Gateway مع الرمز ECONNRESET كاستجابة لطلبات واجهة برمجة التطبيقات في Edge Microgateway.

رسالة الخطأ

سيرى العميل رمز الاستجابة التالي:

HTTP/1.1 502 Bad Gateway

سيتضمن الرد رسالة الخطأ التالية:

{"message":"socket hang up","code":"ECONNRESET"}

الأسباب المحتملة

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
مهلة البقاء على قيد الحياة التي تم ضبطها بشكل غير صحيح تم إعداد مهلات البقاء على قيد الحياة بشكل غير صحيح بين Edge Microgateway والخادم الهدف. مستخدمو Edge العام والخاص على السحابة الإلكترونية
يغلق الخادم المستهدف الاتصال قبل أوانه يغلق الخادم الهدف الاتصال مبكرًا بينما ترسل تقنية Edge Microgateway حمولة الطلب. مستخدمو Edge العام والخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

  1. تحقَّق من سجلات Edge Microgateway:
    /var/tmp/edgemicro-`hostname`-*.log
    
  2. ابحث عن أي أخطاء 502 في الرمز ECONNRESET خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي طلبات لا تزال يتعذّر إجراؤها مع 502.
    2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test]
    [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684]
    [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
    
  3. إذا تم ضبط مستوى التسجيل على warn أو info، ستظهر أيضًا رسالة [warn] تتضمّن اسم المضيف والمنفذ للخادم الهدف في العنصر الثاني. في هذا المثال، تمثّل هذه السمة X.X.X.X:8080، ويمكن استخدامها لاحقًا لتصوير tcpdump.
    2021-06-23T03:52:24.109Z
    [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup]
    [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware]
    [targetRequest error][GET][][socket hang up][ECONNRESET][395]
    
  4. يشير رمز الخطأ [socket hang up][ECONNRESET] إلى أنّ الخادم الهدف قد أغلق الاتصال بـ Edge Microgateway. ويمكن البحث عن هذا الاسم في السجلّات لتحديد عدد مرات حدوثه.

السبب: مهلة الحفاظ على الاتصال التي تم إعدادها بشكل غير صحيح

التشخيص

  1. اتّبِع الخطوات الواردة في خطوات التشخيص الشائعة وتأكّد من ظهور الخطأ [socket hang up][ECONNRESET].
  2. إذا كانت الإجابة نعم، يمكنك إجراء المزيد من التحقيق بمساعدة tcpdump كما هو موضّح أدناه:

استخدام الأداة tcpdump

  1. التقِط tcpdump بين Edge Microgateway وخادم الخلفية على نظام التشغيل المضيف Edge Microgateway باستخدام الأمر التالي:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. تحليل tcpdump التي تم الحصول عليها:

    نموذج لإخراج tcpdump: ( عرض صورة أكبر)

    في النموذج أعلاه tcpdump، يمكنك الاطّلاع على ما يلي:

    1. في الحزمة 250288، يرسل العميل طلب POST.
    2. في الحزمة 250371، يستجيب الخادم بـ 200 OK.
    3. في الحزمة 250559، يرسل العميل ACK.
    4. في الحزمة 250560، يُرسِل الخادم رسالة Continuation.
    5. في الحزمة 250561، يرسل العميل ACK.
    6. في الحزمة 262436، يرسل الخادم FIN, ACK إلى العميل لبدء إغلاق الاتصال. يُرجى العلم أنّ ذلك يبعد خمس ثوانٍ تقريبًا عن الحزمة السابقة (250561).
    7. في الحزمة 262441، يُرسِل العميل طلب POST آخر. ومع ذلك، يتعذّر تنفيذ هذا الإجراء لأنّ الخادم بدأ بالفعل إغلاق الاتصال. يستجيب باستخدام RST في الحزمة 262441.

    تمت إعادة استخدام الاتصال نفسه بنجاح مرة على الأقل في هذا المثال، ولكن في الطلب الأخير، يبدأ الخادم إغلاق الاتصال بعد خمس ثوانٍ من الخمول، ويحدث ذلك في الوقت نفسه الذي أرسل فيه العميل طلبًا جديدًا. يشير ذلك إلى أنّ مهلة التحقّق من الاتصال بخادم الخلفية تكون على الأرجح أقصر أو مساوية للقيمة التي تم ضبطها في البرنامج. للتحقق من ذلك، يُرجى الاطّلاع على مقارنة مهلة البقاء على قيد الحياة على Edge Microgateway وخادم الخلفية.

مقارنة مهلات التحقّق من الاتصال

  1. لا يتضمّن Edge Microgateway خاصية محدَّدة لمهلة التحقّق من الاتصال. ويتم تحديده من خلال نظام التشغيل الذي يتم تشغيله عليه. ومن الأمثلة الشائعة حاويات Windows وLinux وDucker.
  2. من المحتمل أن يتم تخصيص هذا في نظام التشغيل. راجِع مشرف النظام. وفقًا للإعدادات التلقائية، تكون مهلة التحقّق من الصحة التلقائية تبلغ ساعتين في أنظمة التشغيل Linux.
  3. بعد ذلك، تحقق من خاصية مهلة البقاء على قيد الحياة التي تم ضبطها على خادم الخلفية. ولنفترض أنّه تم ضبط خادم الخلفية بقيمة 10 ثوانٍ.
  4. إذا وجدت أنّ قيمة مهلة التحقّق من الاتصال على نظام التشغيل أعلى من قيمة خاصية مهلة التحقّق من الاتصال على الخادم الخلفية كما في المثال أعلاه، هذا هو سبب أخطاء 502.

درجة الدقّة

تأكَّد من أنّ قيمة خاصية مهلة البقاء على قيد الحياة تكون دائمًا أقل على نظام التشغيل الذي يعمل فيه برنامج Edge Microgateway مقارنةً بذاتها على خادم الخلفية.

  1. تحديد القيمة المضبوطة لمهلة البقاء على قيد الحياة على خادم الخلفية.
  2. اضبط قيمة مناسبة لخاصية مهلة التحقّق من الاتصال في نظام التشغيل في نظام التشغيل، بحيث تكون قيمة مهلة التحقّق من الاتصال أقل من القيمة التي تم ضبطها على الخادم الخلفي، وذلك باتّباع الخطوات التي تنطبق على نظام التشغيل الذي تستخدمه.

أفضل الممارسات

ننصح بشدة بأن تكون دائمًا مكونات المراحل المتقدمة في عملية التسويق أصغر من الحدّ الأدنى لمهلة البقاء على قيد الحياة مقارنةً بالخوادم الرئيسية لتجنُّب حدوث هذه الأنواع من شروط السباق وأخطاء 502. يجب أن تكون كل قفزة عند البث أقل من كل قفزة عند البث المباشر. في Edge Microgateway، من الممارسات الجيدة استخدام الإرشادات التالية:

  1. يجب أن تكون مهلة البقاء على قيد الحياة في تطبيق العميل أو جهاز موازنة التحميل أقل من مهلة الحفاظ على قيد الحياة في Edge Microgateway.

    لضبط مهلة البقاء على قيد الحياة على Edge Microgateway، أضِف القيمة keep_alive_timeout إلى ملف ~/.edgemicro/org-env-config.yaml.

    edgemicro:
      keep_alive_timeout: 65000
    
  2. يجب أن تكون مهلة التحقّق من حالة النشاط في نظام تشغيل Edge Microgateway أقل من مهلة التحقّق من الاتصال بالخادم الهدف.
  3. وإذا كانت هناك أي قفزات أخرى أمام Edge Microgateway أو خلفه، يجب تطبيق القاعدة نفسها. يجب أن تترك على عاتق العميل دائمًا مسؤولية إغلاق الاتصال مع مصدر البيانات.

السبب: يغلق الخادم المستهدف الاتصال قبل أوانه

التشخيص

  1. اتّبِع الخطوات الموضّحة في خطوات التشخيص الشائعة وتحقَّق من ظهور الخطأ [socket hang up][ECONNRESET].
  2. إذا كانت الإجابة "نعم"، يمكنك إجراء المزيد من التحقيق بمساعدة tcpdump كما هو موضّح أدناه.

    تشير رسالة الخطأ [targetRequest error][GET][][socket hang up][ECONNRESET] في المثال أعلاه إلى حدوث هذا الخطأ أثناء إرسال Edge Microgateway للطلب إلى خادم الخلفية (الهدف). أي أنّ Edge Microgateway قد أرسل طلب واجهة برمجة التطبيقات إلى خادم الخلفية وكان ينتظر الاستجابة. مع ذلك، أنهى خادم الخلفية الاتصال بشكل مفاجئ قبل أن تتلقّى Edge Microgateway استجابة.

  3. تحقَّق من سجلّات الخادم الخلفية لمعرفة ما إذا كانت هناك أي أخطاء أو معلومات من الممكن أن تؤدي إلى إنهاء الاتصال على نحو مفاجئ في خادم الخلفية. إذا عثرت على أي أخطاء أو معلومات، انتقِل إلى الحلّ وأصلِح المشكلة بشكل مناسب في خادم الخلفية.
  4. إذا لم تعثر على أي أخطاء أو معلومات في خادم الخلفية، اجمع إخراج tcpdump على خادم Edge Microgateway:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. تحليل tcpdump التي تم الحصول عليها:

    نموذج لإخراج tcpdump: ( عرض صورة أكبر)

    في النموذج أعلاه tcpdump، يمكنك الاطّلاع على ما يلي:

    1. في الحزمة 4، أرسل Edge Microgateway طلب GET إلى الخادم الهدف.
    2. في الحزمة 5، استجاب الخادم الهدف بـ ACK للإقرار بالطلب.
    3. مع ذلك، في الحزمة 6، بدلاً من الاستجابة بحمولة استجابة، يرسل الخادم الهدف FIN, ACK لبدء إغلاق الاتصال.
    4. في الحِزم 7 فصاعدًا، يتم إغلاق الاتصال بشكل متبادل. بما أنّه تم إغلاق الاتصال قبل إرسال الاستجابة، سيعرض Edge Microgateway خطأ HTTP 502 مرة أخرى إلى العميل.
    5. ملاحظة: يتوافق الطابع الزمني للحزمة 8، 2021-06-23T03:52:24.110Z مع الطابع الزمني الذي تم تسجيل الخطأ عنده في سجلّات Edge Microgateway. ويمكن غالبًا استخدام الطوابع الزمنية في ملفات السجلّ وفي tcpdump لربط الأخطاء بالحِزم الفعلية.

    درجة الدقّة

    أصلِح المشكلة على الخادم الخلفي بشكلٍ مناسب.

    إذا استمرت المشكلة وكنت بحاجة إلى مساعدة في تحديد المشاكل وحلّها 502 Bad Gateway Error أو إذا كنت تشك في أنّها مشكلة في Edge Microgateway، انتقِل إلى ضرورة جمع معلومات التشخيص.

    ضرورة جمع معلومات التشخيص

    في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge:

    • ملفات السجلّ: المجلد التلقائي هو /var/tmp ولكن قد يتم تجاهله في ملف config.yaml الرئيسي (logging > dir parameter). ويُنصح بتغيير log > level إلى info قبل تقديم ملفات السجلّ إلى فريق دعم Apigee.
    • ملف الإعدادات: تتوفّر الإعدادات الرئيسية لتطبيق Edge Microgateway في ملف YAML في مجلد Edge Microgateway التلقائي، $HOME/.edgemicro. يتوفر ملف إعداد تلقائي يُسمى default.yaml، ثم يتوفر ملف واحد لكل بيئة ORG-ENV-config.yaml. يُرجى تحميل هذا الملف بالكامل للمنظمة والبيئة المتأثرة.