502 مدخل غير صالح

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

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP برقم 502 مع الرسالة "مدخل غير صالح" كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

يعني رمز حالة HTTP 502 أنّ العميل لا يتلقى استجابة صالحة من الخوادم الخلفية التي من المفترض أن تنفّذ الطلب.

رسائل الخطأ

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

HTTP/1.1 502 Bad Gateway

بالإضافة إلى ذلك، قد تظهر لك رسائل الخطأ التالية:

<html>
<head>
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>

إذا كان الخطأ صادرًا من الخادم الخلفي، قد ترى شيئًا من هذا القبيل. تعتمد رسالة الخطأ من الخلفية بشكل كامل على طريقة التنفيذ.

<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

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

إليك بعض الأسباب التي قد تؤدي إلى حدوث خطأ 502 مدخل غير صالح لواجهات برمجة التطبيقات التي تمر عبر Apigee Edge:

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
لا تتوفّر أي ميغا بكسل في مسبح يُلاحظ هذا الخطأ إذا كانت جميع وحدات MP في مجموعة المختارات غير متاحة، أي أنها إما معطلة أو مشغولة وبالتالي لا تستجيب. مستخدمو Edge الخاص على السحابة الإلكترونية
إعداد طبقة المقابس الآمنة (SSL) غير صحيح بين أجهزة التوجيه وMP يُلاحظ هذا الخطأ في حال كانت شهادة الجذر الموقَّعة من مرجع تصديق العميل مفقودة في Truststore في جهاز توجيه Edge. مستخدمو Edge الخاص على السحابة الإلكترونية
حدث خطأ من خادم الخلفية ستتم ملاحظة هذا الخطأ في حال فشل خادم الخلفية ويرسل هذه الاستجابة. مستخدمو Edge العام والخاص على السحابة الإلكترونية

السبب: لا يتوفّر ميغا بكسل في المسبح.

يحدث هذا الخطأ إذا وجد جهاز التوجيه أن جميع معالجات الرسائل في منطقة/مركز بيانات معينة غير متاحة (على سبيل المثال، إذا كانت جميعها معطلة).

يتم إعداد Apigee Edge بطريقة تتيح لك توجيه حركة بيانات (طلبات) واجهة برمجة التطبيقات الواردة في منطقة أو مركز بيانات معيّن من أجهزة التوجيه إلى معالِجات الرسائل (MPs) في المنطقة/مركز البيانات نفسه. في بعض الحالات، قد يتم إعداد مكوّنات Apigee Edge في منطقة واحدة أو مركز بيانات واحد فقط، وفي بعض الحالات، قد يتم إعدادها في أكثر من منطقة أو مركز بيانات واحد. في كل منطقة/مركز بيانات، سيكون هناك جهازان أو أكثر من أجهزة التوجيه ومعالِجات الرسائل في الإعدادات.

التشخيص

  1. حدِّد المناطق أو مراكز البيانات التي يتعذّر فيها تنفيذ طلبات البيانات من واجهة برمجة التطبيقات مع ظهور الخطأ "502 مدخل غير صالح"، إذا كان هناك أكثر من منطقة أو مركز بيانات واحد. يمكنك العثور على ذلك إما من خلال تحديد المنطقة التي يلاحظ فيها المستخدمون أخطاء 502 أو عن طريق التحقق من سجلات وصول NGINX في دليل /opt/apigee/var/log/edge-router/nginx/ على كل جهاز من أجهزة التوجيه التي تنتمي إلى مناطق مختلفة.
  2. سيظهر لك الخطأ التالي في سجلّات أخطاء NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log).
    2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
    

السيناريو 1: تعطل جميع معالجات الرسائل

  1. تحقق مما إذا كانت معالجات الرسائل في المنطقة/مركز البيانات المحددة قيد التشغيل أم لا.
  2. إذا كانت جميع معالِجات الرسائل معطلة، يُرجى إعادة تشغيلها.

درجة الدقّة

أعِد تشغيل جميع معالجات الرسائل باستخدام الأمر التالي:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

السيناريو 2: جميع معالجي الرسائل مشغولون في معالجة الطلبات الجارية

يحدث هذا الخطأ إذا وجدت أجهزة التوجيه أن جميع معالِجات الرسائل في منطقة/مركز بيانات معين غير متاحة؛ نظرًا لأنهم جميعًا مشغولون في معالجة الطلبات الجارية.

  1. تحقق مما إذا كانت معالجات الرسائل في المنطقة/مركز البيانات المحددة قيد التشغيل أم لا.
  2. إذا كانت جميع معالِجات الرسائل مفعّلة ونشطة، تأكَّد مما إذا كانت بعض معالِجات الرسائل تواجه استخدامًا مرتفعًا لوحدة المعالجة المركزية(CPU)، ثم أنشئ ثلاث عمليات تفريغ لسلاسل الرسائل كل 30 ثانية باستخدام الأمر التالي:
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
    
  3. إذا كان استخدام معالِج الرسائل مرتفعًا في الذاكرة، يمكنك إنشاء عملية تفريغ للذاكرة باستخدام الأمر التالي:
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
    
  4. أعِد تشغيل معالج الرسائل باستخدام الأمر أدناه. من المفترض أن يؤدي ذلك إلى إيقاف وحدة المعالجة المركزية (CPU) والذاكرة:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  5. راقِب طلبات البيانات من واجهة برمجة التطبيقات للتأكّد مما إذا كانت المشكلة لا تزال قائمة.
  6. يمكنك التواصل مع فريق دعم Apigee وتقديم عمليات تفريغ سلاسل المحادثات ونَسْخ الذاكرة وسجلّات "معالج الرسائل" (/opt/apigee/var/log/edge-message-processor/logs/system.log) للمساعدة في التحقيق في سبب ارتفاع معدّل استخدام وحدة المعالجة المركزية (CPU)/الذاكرة.

السبب: ضبط طبقة المقابس الآمنة (SSL) غير صحيح بين أجهزة التوجيه وأجهزة MP

التشخيص

  1. تحقَّق من سجلات وصول NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log). سترى استجابة 502 كما هو موضّح أدناه:
        2019-07-23T12:13:42+03:00	sc-10-254-226-23	10.X.X.X:53634	10.X.X.X:8998	0.000	-	-	502	502	189	344	GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2	<host alias>	mp-10-254-226-23-23706-8552529-1	10.129.107.101	-	-	-1	-	-	dc-2	gateway-2	green	-	gateway-2	dc-2	op	pilot	http	-
    
  2. تحقَّق من سجلات أخطاء NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log). ستظهر لك أخطاء مثل ما يلي:
    	2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
    
  3. يوضح هذا فشل تأكيد اتصال طبقة المقابس الآمنة (SSL) بين جهاز التوجيه ومعالج الرسائل.
  4. إذا لاحظت بعناية في رسالة الخطأ في الخطوتين رقم 1 و2، فإن رقم المنفذ المستخدم للاتصال بمعالج الرسائل هو 8998 وهو منفذ غير آمن ولكن البروتوكول هو طبقة المقابس الآمنة (https). عادةً ما يكون رقم المنفذ الآمن المستخدم هو 8443. نظرًا لاستخدام منفذ غير آمن للاتصال الآمن، فإنه يتسبب في إخفاق تأكيد اتصال طبقة المقابس الآمنة (SSL).
  5. يمكن أن يحدث هذا عادةً إذا فاتتك أي خطوات أو أعددت أي قيم غير صحيحة أثناء تهيئة طبقة المقابس الآمنة بين جهاز التوجيه ومعالج الرسائل. راجع الخطوات الموضّحة هنا.
    على سبيل المثال، يمكن أن يحدث هذا الخطأ في حال
    1. تم تحديد المنفذ رقم على أنه 8998 بدلاً من 8443 في /opt/apigee/customer/application/message-processor.properties as shown below
              conf/message-processor-communication.properties+local.http.port=8998
      
    2. ولا يتم حذف ملفات إعداد جهاز التوجيه ضِمن الدليل /opt/nginx/conf.d/* ولم تتم إعادة تشغيل جهاز التوجيه أثناء ضبط طبقة المقابس الآمنة. في هذا السيناريو، يمكنك ملاحظة أن رقم منفذ معالجات الرسائل سيظل رقم 8998 في ملفات التهيئة.

درجة الدقّة

  1. تأكد من اتباع جميع الخطوات المقدمة في ضبط بروتوكول أمان طبقة النقل (TLS) بين جهاز توجيه ومعالج رسائل بشكل صحيح.
  2. إذا استمرت المشكلة، انتقِل إلى جمع معلومات التشخيص.

السبب: حدث خطأ من الخادم الخلفي

التشخيص

  1. وفي حال حدوث الخطأ في كل مرة، يمكنك تسجيل تتبُّع واجهة المستخدم للطلبات التي تعذّر تنفيذها. اختَر طلبًا غير ناجح وانتقل خلال مراحل مختلفة في التتبُّع. إذا لاحظت أنك تحصل على "502 مدخل غير صالح" من الخادم الخلفي نفسه، قد ترجع هذه المشكلة إلى حدوث خطأ ما على الخادم الخلفي.
    تتبُّع يعرض رسالة "502 مدخل غير صالح" واردة من الخادم الخلفية
  2. إذا كانت المشكلة متقطّعة وتعذَّر عليك تسجيل بيانات التتبُّع،
    1. إذا كنت من مستخدمي Public Cloud، يمكنك استخدام مراقبة واجهة برمجة التطبيقات والاطّلاع على التفاصيل بشأن أخطاء 502.
      1. إذا لاحظت أنّ رمز الخطأ هو messaging.adaptors.http.flow.ErrorResponseCode وكان مصدر الخطأ هو target، يكون سبب الخطأ هو خادم الخلفية.
    2. إذا كنت من مستخدمي Private Cloud، يمكنك تحليل سجلّات وصول NGINX
      /opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
      سيظهر لك إدخال الطلب الذي تعذّر تنفيذه على النحو التالي:
      2017-02-24T14:42:12+00:00	rt-01	192.8.155.2:18118	192.168.84.166:8998	10.225	-	-	502	502	440	0	GET /adv-eadlg-test/documents?type=doctype HTTP/1.1	rt-02efawae234-1234	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36	myorg-dev.apigee.net	 rt-02efawae234-1234	6	-	false	target	messaging.adaptors.http.flow.ErrorResponseCode	null/null	-	/organizations/myorg/environments/dev/apiproxies/api123
      
      1. إذا لاحظت أنّ رمز الخطأ هو messaging.adaptors.http.flow.ErrorResponseCode وكان مصدر الخطأ هو target، يكون سبب الخطأ هو خادم الخلفية.

درجة الدقّة

  1. يمكنك العمل مع فريق الخادم الذي يعمل في الخلفية لإصلاح هذه المشكلة في الخلفية.

جمع معلومات التشخيص

  1. سجلات وصول NGINX
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)
    وسجلّات الأخطاء
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log).
  2. سجلّات "معالج الرسائل"
    (/opt/apigee/var/log/edge-message-processor/logs/system.log)