أنت بصدد الاطّلاع على مستندات 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 في منطقة أو مركز بيانات واحد فقط، وفي حالات أخرى، قد يتم إعدادها في أكثر من منطقة أو مركز بيانات واحد. في كل منطقة أو مركز بيانات، سيتم إعداد جهازي توجيه أو أكثر ومعالِجات رسائل.
التشخيص
- حدِّد المناطق أو مراكز البيانات التي تتعذّر فيها طلبات البيانات من واجهة برمجة التطبيقات بسبب الخطأ "502 Bad Gateway"، إذا كان هناك أكثر من منطقة أو مركز بيانات واحد. يمكنك العثور على ذلك إما من خلال تحديد المنطقة التي يظهر فيها للمستخدمين أخطاء 502 أو من خلال التحقّق من سجلات الوصول إلى NGINX في الدليل
/opt/apigee/var/log/edge-router/nginx/على كل جهاز من أجهزة التوجيه التي تنتمي إلى مناطق مختلفة. - سيظهر لك الخطأ التالي في سجلات أخطاء 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: جميع معالِجات الرسائل متوقفة
- تحقَّق مما إذا كانت معالِجات الرسائل في المنطقة أو مركز البيانات المحدّد قيد التشغيل.
- إذا كانت جميع معالِجات الرسائل متوقفة، أعِد تشغيلها.
الدقة
أعِد تشغيل جميع معالِجات الرسائل باستخدام الأمر التالي:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
السيناريو 2: جميع معالِجات الرسائل مشغولة بمعالجة الطلبات الجارية
سيحدث هذا الخطأ إذا وجد جهاز التوجيه أنّ جميع معالِجات الرسائل في منطقة أو مركز بيانات معيّن غير متاحة لأنّها جميعها مشغولة بمعالجة الطلبات الجارية.
- تحقَّق مما إذا كانت معالِجات الرسائل في المنطقة أو مركز البيانات المحدّد قيد التشغيل.
- إذا كانت جميع معالِجات الرسائل قيد التشغيل ونشطة، تحقَّق مما إذا كان أحد معالِجات الرسائل أو أكثر يستخدم وحدة المعالجة المركزية(CPU) بشكل كبير، ثم أنشئ ثلاث عمليات تفريغ للذاكرة كل 30 ثانية باستخدام الأمر التالي:
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- إذا كان أحد معالِجات الرسائل أو أكثر يستخدم الذاكرة بشكل كبير، أنشئ لقطة لأجزاء من الذاكرة باستخدام الأمر التالي:
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - أعِد تشغيل معالج الرسائل باستخدام الأمر أدناه. يجب أن يؤدي ذلك إلى خفض استخدام وحدة المعالجة المركزية والذاكرة:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- راقِب طلبات البيانات من واجهة برمجة التطبيقات للتأكّد مما إذا كانت المشكلة لا تزال تحدث.
- تواصَل مع فريق دعم Apigee وقدِّم عمليات تفريغ سلاسل التعليمات ولقطة لأجزاء من الذاكرة وسجلات معالِج الرسائل (
/opt/apigee/var/log/edge-message-processor/logs/system.log) للمساعدة في التحقيق في سبب ارتفاع استخدام وحدة المعالجة المركزية أو استخدام الذاكرة.
السبب: إعداد غير صحيح لبروتوكول طبقة المقابس الآمنة (SSL) بين أجهزة التوجيه ومعالِجات الرسائل
التشخيص
- تحقَّق من سجلات الوصول إلى NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.). سيظهر لك الردّ 502 كما هو موضّح أدناه:_access_log
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 -
- تحقَّق من سجلات أخطاء 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>"
- يوضّح ذلك أنّ تأكيد الاتصال عبر طبقة المقابس الآمنة (SSL) بين جهاز التوجيه ومعالج الرسائل قد تعذّر.
- إذا لاحظت بعناية في رسالة الخطأ في الخطوتَين 1 و2، فإنّ رقم المنفذ المستخدَم للتواصل مع معالج الرسائل هو 8998، وهو منفذ غير آمن، ولكن البروتوكول هو طبقة المقابس الآمنة (https). عادةً ما يكون رقم المنفذ الآمن المستخدَم هو 8443. بما أنّه يتم استخدام منفذ غير آمن للاتصال الآمن، يؤدي ذلك إلى تعذُّر تأكيد الاتصال عبر طبقة المقابس الآمنة.
- يمكن أن يحدث ذلك عادةً إذا فاتتك أي خطوات أو ضبطت أي قيم غير صحيحة أثناء إعداد طبقة المقابس الآمنة بين جهاز التوجيه ومعالج الرسائل. راجِع الخطوات الموضّحة هنا.
على سبيل المثال، يمكن أن يحدث هذا الخطأ في الحالات التالية:
- تم تحديد رقم المنفذ على أنّه 8998 بدلاً من 8443 في
/opt/apigee/customer/application/message-processor.properties as shown below
conf/message-processor-communication.properties+local.http.port=8998
- لم يتم حذف ملفات إعداد جهاز التوجيه ضِمن الدليل
/opt/nginx/conf.d/*ولم تتم إعادة تشغيل جهاز التوجيه أثناء إعداد طبقة المقابس الآمنة. في هذا السيناريو، يمكنك ملاحظة أنّ رقم منفذ معالِجات الرسائل سيظل 8998 في ملفات الإعداد.
- تم تحديد رقم المنفذ على أنّه 8998 بدلاً من 8443 في
الدقة
- تأكَّد من اتّباع جميع الخطوات الواردة في إعداد بروتوكول أمان طبقة النقل (TLS) بين جهاز توجيه ومعالج رسائل بشكل صحيح.
- إذا استمرت المشكلة، انتقِل إلى جمع معلومات التشخيص.
السبب: خطأ من خادم الخلفية
التشخيص
- إذا كان الخطأ يحدث في كل مرة، يمكنك رصد أداة التتبُّع في واجهة المستخدم للطلبات التي تعذّر تنفيذها. اختَر طلبًا تعذّر تنفيذه وتنقَّل بين المراحل المختلفة في أداة التتبُّع. إذا لاحظت أنّك تتلقّى الخطأ "502 Bad Gateway" من خادم الخلفية نفسه، قد تكون المشكلة ناتجة عن حدوث بعض حالات الفشل على خادم الخلفية.
أداة التتبُّع تعرض الخطأ "502 Bad Gateway" من خادم الخلفية
- إذا كانت المشكلة متقطّعة ولم تتمكّن من رصد أداة التتبُّع،
- إذا كنت مستخدمًا لـ Public Cloud، يمكنك استخدام مراقبة واجهة برمجة التطبيقات والاطّلاع على تفاصيل أخطاء 502.
- إذا لاحظت أنّ رمز الخطأ هو
messaging.adaptors.http.flow.ErrorResponseCodeوأنّ مصدر الخطأ هوtarget، يكون الخطأ ناتجًا عن خادم الخلفية.
- إذا لاحظت أنّ رمز الخطأ هو
- إذا كنت مستخدمًا لـ 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
- إذا لاحظت أنّ رمز الخطأ هو
messaging.adaptors.http.flow.ErrorResponseCodeوأنّ مصدر الخطأ هوtarget، يكون الخطأ ناتجًا عن خادم الخلفية.
- إذا لاحظت أنّ رمز الخطأ هو
- إذا كنت مستخدمًا لـ Public Cloud، يمكنك استخدام مراقبة واجهة برمجة التطبيقات والاطّلاع على تفاصيل أخطاء 502.
الدقة
- تعاوَن مع فريق خادم الخلفية لحلّ هذه المشكلة في الخلفية.
جمع معلومات التشخيص
- سجلات الوصول إلى NGINX
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_access_log
وسجلات الأخطاء
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)._error_log - سجلات معالِج الرسائل
(/opt/apigee/var/log/edge-message-processor/logs/system.log)