يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP لـ 502 Bad Gateway
مع رمز الخطأ protocol.http.DuplicateHeader
كاستجابة لطلبات واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
بالإضافة إلى ذلك، قد تلاحظ رسالة خطأ مشابهة للرسالة المعروضة أدناه:
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
الأسباب المحتملة
يحدث هذا الخطأ إذا ظهر عنوان HTTP معيّن غير مسموح له بإنشاء نُسخ طبق الأصل من عنوان URL في Apigee Edge أكثر من مرة بقيم مماثلة أو بقيم مختلفة، وذلك كجزء من استجابة HTTP التي يرسلها خادم الخلفية إلى Apigee Edge.
وفقًا لـ
RFC 7230، القسم 3.2.2: الترتيب الميداني، يجب ألا ينشئ المُرسِل حقول عناوين متعددة
تحمل اسم الحقل نفسه في الرسالة ما لم يتم تحديد قيمة الحقل بالكامل لحقل العنوان هذا على أنها قائمة مفصولة بفواصل، [أي #(values)] أو حقل العنوان
هو استثناء معروف. إذا رصد Apigee Edge أنّ عنوانًا معيّنًا محدّدًا، غير مسموح له
بالحصول على نُسخ طبق الأصل، يتم إرساله أكثر من مرة في استجابة HTTP التي يرسلها
الخادم الهدف/الخلفية،
يستجيب بالرمز 502 Bad Gateway
ورمز الخطأ
protocol.http.DuplicateHeader
.
في ما يلي الأسباب المحتملة لهذا الخطأ:
السبب | الوصف | تعليمات تحديد المشاكل وحلّها السارية على |
---|---|---|
عنوان مكرّر في الرد | تحتوي الاستجابة من الخادم الخلفية على عناوين مكررة. | مستخدمو Edge العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- تأكّد من ضبط فلتر الخادم الوكيل على الكل.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.DuplicateHeader
كما هو موضّح أدناه:يتم عرض معلومات عن رمز الخطأ
protocol.http.DuplicateHeader
كما هو موضح أدناه:- تأكَّد من أنّ رمز الحالة هو
502
كما هو موضّح في المثال أعلاه. - انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.
من نافذة السجلّات، لاحظ التفاصيل التالية:
- رمز الحالة:
502
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.DuplicateHeader
.
- رمز الحالة:
- مصدر الخطأ هو
target
، ما يشير إلى احتواء الاستجابة من الخادم الخلفية على عناوين مكررة.
أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبُّع وإمّا
- انتظر حتى يحدث الخطأ
502 Bad Gateway
أو - إذا كان بإمكانك إعادة إظهار المشكلة، عليك طلب بيانات من واجهة برمجة التطبيقات وإعادة إظهار الخطأ
502 Bad Gateway
.
- انتظر حتى يحدث الخطأ
تأكد من تفعيل عرض جميع معلومات التدفق:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
- تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
ستجد الخطأ عادةً في عملية تدفق بعد مرحلة تم إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:
دوِّن قيمة الخطأ في عملية التتبّع.
يعرض تقرير تتبُّع النموذج أعلاه الخطأ على أنّه
Duplicate Header "Expires"
. وبما أنّ الخطأ يرفع من قِبل Apigee بعد إرسال الطلب إلى خادم الخلفية، فهو يشير إلى أنّ خادم الخلفية أرسل العنوانExpires
أكثر من مرة.- انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
انتقِل للأسفل إلى القسم Stage Details - Response Headers (تفاصيل المرحلة - عناوين الاستجابة) وحدِّد قيم X-Apigee-Error-code وX-Apigee-error-source كما هو موضّح أدناه:
- ستظهر قيمتا X-Apigee-fault-code وX-Apigee-fault-code، على أنّه
protocol.http.DuplicateHeader
وtarget
، ما يشير إلى أنّ هذا الخطأ حدث بسبب تمرير خادم الخلفية لعنوان الاستجابةExpires
بشكل متكرر.عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
تحقَّق مما إذا كنت تستخدم تسلسل الخادم الوكيل، وذلك إذا كان الخادم الهدف أو نقطة النهاية الهدف يستدعي خادمًا وكيلاً آخر في Apigee.
لتحديد ذلك، انتقِل مرة أخرى إلى مرحلة الخادم تم إرسال الطلب إلى الهدف. انقر على Show Curl (إظهار عنوان URL).
ستفتح نافذة تجانس طلب تم الإرسال إلى الخادم الهدف والتي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم الهدف.
- إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى اسم مستعار لمضيف افتراضي، يكون ذلك في هذه الحالة تسلسل الخادم الوكيل. في هذه الحالة، يجب تكرار جميع الخطوات السابقة للخادم الوكيل المتسلسل إلى أن
تحدّد السبب الفعلي لخطأ
502 Bad Gateway
. - إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى خادم الخلفية، فإنه يشير إلى أن خادم الخلفية يرسل رؤوسًا مكررة في استجابة Apigee.
NGINX
لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء
502
في HTTP. تحقَّق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث عن أي أخطاء
502
تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو إذا كانت هناك أي طلبات لا تزال غير متوافقة مع502
. إذا عثرت على أي أخطاء
502
تتضمّن X-Apigee- error-code مطابِقًا لقيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-codeنموذج خطأ 502 من سجل وصول NGINX:
يحتوي إدخال النموذج أعلاه من سجل NGINX Access على القيم التالية للسمة X- Apigee-error-code وX-Apigee-error-source:.
عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
السبب: عنوان مكرر في الاستجابة
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كان مصدر الخطأ يتضمّن القيمة
target
، يعني ذلك أنّ الاستجابة المُرسَلة من الخادم الهدف تحتوي على عناوين مكرّرة. يمكنك تحديد العنوان الفعلي الذي يتم إرساله أكثر من مرة كجزء من الاستجابة باستخدام إحدى الطرق التالية:
رسالة الخطأ
استخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى
faultstring
. يتضمّنfaultstring
اسم العنوان الذي تم إرساله أكثر من مرة.نموذج لرسالة خطأ:
"faultstring":"Duplicate Header \"Expires\""
- في رسالة الخطأ أعلاه، يظهر لك أنّ العنوان
Expires
تم إرساله أكثر من مرة كما هو موضّح فيfaultstring
.
الطلب الفعلي
باستخدام الطلب الفعلي:
- إذا لم يكن لديك إذن بالوصول إلى الطلب الفعلي الذي تم إجراؤه على الخادم الهدف، يمكنك الحصول على أمر
curl
المقابل من الخطوة 10.أ و10.ب إلى استخدام أداة التتبُّع. إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إجراؤه على تطبيق الخادم الهدف، نفِّذ الخطوات التالية:
إجراء اتصال بالخادم الهدف.
نموذج طلب للخادم الهدف المُستخدَم في هذا المثال:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
تحقَّق من قائمة العناوين التي تظهر في الرد.
نموذج استجابة من الخادم الهدف المستخدَم في هذا المثال:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
في نموذج الطلب أعلاه، يتم إرسال العنوان
Expires
أكثر من مرة. ولذلك، يتعذّر تنفيذ هذا الطلب مع ظهور الخطأ502 Bad Gateway
ورمز الخطأ:protocol.http.DuplicateHeader
.إذا ظهر العنوان الذي يظهر اسمه في
faultstring
أكثر من مرة في استجابة خادم الخلفية، يكون ذلك هو سبب هذا الخطأ. في الحالة المذكورة أعلاه، يتم إرسال العنوانExpires
أكثر من مرة.
درجة الدقّة
إصلاح التكرار
الخيار #1 [الخيار المُقترَح] إصلاح خادم الخلفية لعدم تضمين الرؤوس المكرّرة
- حلِّل سبب إرسال خادم الخلفية المحدَّد للرأس المكرَّر
Expires
وتحقَّق مما إذا كان من المقبول أن تقبل الخوادم الوكيلة لواجهة برمجة التطبيقات هذا السبب. وفي معظم الحالات، لن يكون مرغوبًا فيه وفقًا لمواصفات HTTP RFC7230. - إذا لم يكن مرغوبًا فيه، عدِّل تطبيق الخادم المستهدف لعدم إرسال رؤوس مكررة.
في المثال الذي تمت مناقشته أعلاه، لوحظ أنه يتم إرسال العنوان
Expires
مرتين بالقيمة نفسها، وهذا أمر غير مرغوب فيه. يمكنك حل هذه المشكلة من خلال التأكّد من أنّ الخادم الهدف يمرِّر عنوانExpires
مرة واحدة فقط. - وإذا كان ذلك مرغوبًا فيه وتريد السماح بالعناوين المكرّرة، انتقِل إلى الخيار #2 استخدام سمة CwC.
CwC
الخيار 2: استخدام سمة "CwC"
توفّر Apigee سمة CwC HTTPHeader.<HeaderName>
التي تسمح لتطبيقات العميل والخوادم المستهدفة بإرسال عناوين مكرّرة إلى الخوادم الوكيلة لواجهة برمجة التطبيقات في Apigee Edge.
سمة "CwC" | القيم |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
على سبيل المثال، يمكن ضبط السمة التالية في "معالجات الرسائل" للسماح بالتكرار
والقيمة المتعددة للعنوان Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- إذا كنت مستخدمًا على السحابة الإلكترونية الخاصة، يمكنك ضبط الموقع لمنع Apigee
Edge من رفع الخطأ
502 Bad Gateway
، حتى إذا كان الطلب يحتوي على عناوين مكرّرة باستخدام دليل الإرشادات حول ضبط معالجات الرسائل لاستخدام العناوين المكرّرة. - إذا كنت مستخدمًا على Cloud Cloud، يُرجى التواصل مع فريق دعم Apigee Edge لضبط هذا الموقع لمؤسستك.
المواصفات
يستجيب فريق Apigee لاستجابة الخطأ 502 Bad Gateway
لأنّه يتوقّع أن يعمل خادم الخلفية وفقًا لمواصفات RFC التالية:
المواصفات |
---|
RFC 7230، القسم 3.2.2: ترتيب الحقول |
RFC 7230، القسم 3.2: حقول العناوين |
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.
ضرورة جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge.
إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أكمِل أمر
curl
المستخدَم لإعادة إظهار الخطأ502
. - ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:
- رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- سجلّات نظام "معالج الرسائل"
/opt/apigee/var/log/edge-message-processor/logs/system.log