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

أنت بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

المشكلة

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

يعني رمز حالة 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 Bad Gateway" لواجهات برمجة التطبيقات التي تمرّ عبر Apigee Edge:

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

السبب: ما مِن معالِجات رسائل متاحة في المجموعة

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

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

التشخيص

  1. حدِّد المناطق أو مراكز البيانات التي تتعذّر فيها طلبات البيانات من واجهة برمجة التطبيقات بسبب الخطأ "502 Bad Gateway"، إذا كان هناك أكثر من منطقة أو مركز بيانات واحد. يمكنك العثور على ذلك إما من خلال تحديد المنطقة التي يظهر فيها للمستخدمين أخطاء 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. أعِد تشغيل معالج الرسائل باستخدام الأمر أدناه. يجب أن يؤدي ذلك إلى خفض استخدام وحدة المعالجة المركزية والذاكرة:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. راقِب طلبات البيانات من واجهة برمجة التطبيقات للتأكّد مما إذا كانت المشكلة لا تزال تحدث.
  6. تواصَل مع فريق دعم Apigee وقدِّم عمليات تفريغ سلاسل التعليمات ولقطة لأجزاء من الذاكرة وسجلات معالِج الرسائل (/opt/apigee/var/log/edge-message-processor/logs/system.log) للمساعدة في التحقيق في سبب ارتفاع استخدام وحدة المعالجة المركزية أو استخدام الذاكرة.

السبب: إعداد غير صحيح لبروتوكول طبقة المقابس الآمنة (SSL) بين أجهزة التوجيه ومعالِجات الرسائل

التشخيص

  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. بما أنّه يتم استخدام منفذ غير آمن للاتصال الآمن، يؤدي ذلك إلى تعذُّر تأكيد الاتصال عبر طبقة المقابس الآمنة.
  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 Bad Gateway" من خادم الخلفية نفسه، قد تكون المشكلة ناتجة عن حدوث بعض حالات الفشل على خادم الخلفية.
    أداة التتبُّع تعرض الخطأ "502 Bad Gateway" من خادم الخلفية
  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)