يتم الآن عرض مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة HTTP 502 Bad Gateway مع
رمز الخطأ protocol.http.TooBigHeaders كردّ على طلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقّى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
بالإضافة إلى ذلك، قد تظهر لك رسالة الخطأ التالية:
{
"fault":{
"faultstring":"response headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}الأسباب المحتملة
يحدث هذا الخطأ إذا كان الحجم الإجمالي للعناوين التي يرسلها الخادم الوجهة/الخادم الخلفي إلى Apigee Edge كجزء من استجابة HTTP أكبر من الحدّ المسموح به في Apigee Edge.
في ما يلي الأسباب المحتملة لهذا الخطأ:
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| حجم العناوين في الاستجابة أكبر من الحدّ المسموح به | يكون حجم عنوان معيّن أو مجموع أحجام جميع الـ عناوين التي يرسلها الخادم الوجهة/الخادم الخلفي كجزء من استجابة HTTP إلى Apigee Edge أكبر من الـ حدّ المسموح به في Apigee Edge. | مستخدمو Edge Public Cloud وPrivate Cloud |
الخطوات الشائعة لتشخيص المشكلة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة التحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- يمكنك اختيار فلتر الخادم الوكيل لتضييق نطاق رمز الخطأ.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.TooBigHeadersكما موضّح أدناه:
ستظهر لك معلومات عن رمز الخطأ
protocol.http.TooBigHeadersكما هو موضّح أدناه:
انقر على عرض السجلّات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلّات ، يُرجى تدوين التفاصيل التالية:
- رمز الحالة:
502 - مصدر الخطأ:
target - رمز الخطأ:
protocol.http.TooBigHeaders.
- رمز الحالة:
- إذا كانت قيمة مصدر الخطأ هي
targetوكانت قيمة رمز الخطأ هيprotocol.http.TooBigHeaders، يشير ذلك إلى أنّ استجابة HTTP من الخادم الوجهة/ الخادم الخلفي تتضمّن عناوين أكبر من الحدّ المسموح به في Apigee Edge.
أداة التتبُّع
- فعِّل جلسة التتبُّع
وأجرِ أحد الإجراءَين التاليَين:
- انتظِر إلى حين ظهور الخطأ
502 Bad Gateway، أو - إذا كان بإمكانك إعادة إظهار المشكلة، نفِّذ طلب البيانات من واجهة برمجة التطبيقات وأعِد إظهار الخطأ
502 Bad Gateway.
- انتظِر إلى حين ظهور الخطأ
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبُّع.
- انتقِل خلال المراحل المختلفة للتتبُّع وحدِّد مكان حدوث الخطأ.
عادةً ما يظهر هذا الخطأ في التدفق المسمّى Error بعد مرحلة Request sent to target server مباشرةً كما هو موضّح أدناه:
دوِّن قيم الخطأ من التتبُّع:
- error:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
يشير ذلك إلى أنّ Apigee Edge (مكوّن "معالج الرسائل") يعرض الخطأ فور تلقّيه الاستجابة من الخادم الخلفي بسبب تجاوز حجم العنوان الحدّ المسموح به.
- error:
سيظهر لك الخطأ في استجابة الخطأ Response Sent to Client التي يرسلها Apigee Edge كما هو موضّح أدناه:
- دوِّن قيم الخطأ من التتبُّع. يعرض نموذج التتبُّع أعلاه ما يلي:
- الخطأ:
502 Bad Gateway - محتوى الخطأ:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- الخطأ:
انتقِل إلى مرحلة AX (تم تسجيل بيانات الإحصاءات) في التتبُّع وانقر عليها للاطّلاع على التفاصيل ذات الصلة.
دوِّن قيمة ما يلي:
رؤوس الخطأ القيمة X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetمحتوى الخطأ: النص {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدم Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الرئيسية عن الخطأ
502 Bad Gatewayفي HTTP. تحقَّق من سجلّات الوصول إلى NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logملاحظة: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502مع رمز الخطأprotocol.http.TooBigHeadersخلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر مع502. إذا عثرت على أي أخطاء
502مع X-Apigee-fault-code الذي يطابق قيمةprotocol.http.TooBigHeaders، حدِّد قيمة X-Apigee-fault-source.مثال على الخطأ 502 من سجلّ الوصول إلى NGINX:
يحتوي الإدخال النموذجي أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لـ X-Apigee-fault-code وX-Apigee-fault-source:
رؤوس الخطأ القيمة X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
السبب: حجم العناوين في الاستجابة أكبر من الحدّ المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم حمولة الاستجابة للخطأ الذي تم رصده باستخدام "مراقبة واجهة برمجة التطبيقات" أو أداة التتبُّع أو سجلّات الوصول إلى NGINX كما هو موضّح في الخطوات الشائعة لتشخيص المشكلة.
- إذا كانت قيمة مصدر الخطأ هي
target، يشير ذلك إلى أنّ الاستجابة التي يرسلها الخادم الوجهة/الخادم الخلفي إلى Apigee تتضمّن عناوين أكبر من الحدّ المسموح به في Apigee Edge. - يمكنك التأكّد من أنّ الاستجابة من الخادم الوجهة/الخادم الخلفي تتضمّن عناوين أكبر من الحدّ المسموح به باستخدام إحدى الطريقتَين التاليتَين:
رسالة الخطأ
للتأكّد باستخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى
faultstring. تشيرfaultstringإلى أنّ حجم عنوان الاستجابة قد تجاوز الحدّ المسموح به.مثال على رسالة الخطأ:
"faultstring":"response headers size exceeding 25,600"
في رسالة الخطأ أعلاه، لاحظ في
faultstringأنّ الاستجابة تتضمّن عناوين يتجاوز حجمها الإجمالي الحدّ المسموح به.الطلب الفعلي
للتأكّد باستخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إرساله إلى الخادم الوجهة/الخادم الخلفي، اتّبِع الخطوات التالية:
- إذا كنت مستخدم Public Cloud/Private Cloud، أرسِل طلبًا مباشرةً إلى الخادم الخلفي من الخادم الخلفي نفسه أو أي جهاز آخر يُسمح لك منه بإرسال الطلب إلى الخادم الخلفي server.
- إذا كنت مستخدم Private Cloud، يمكنك أيضًا إرسال الطلب إلى الخادم الخلفي من أحد معالِجات الرسائل.
- افحص الاستجابة التي تم تلقّيها من الخادم الخلفي، واحتسِب حجم العناوين التي تم تمريرها في الاستجابة وتأكَّد منه على وجه التحديد.
إذا تبيّن لك أنّ حجم العناوين في حمولة الاستجابة أكبر من الـ حدّ المسموح به في Apigee Edge، يكون ذلك هو سبب المشكلة.
مثال على الاستجابة من الخادم الوجهة:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactفي المثال أعلاه، يتجاوز حجم
Testheader1وTestheader2الحدّ المسموح به، ما يؤدي إلى ظهور هذا الخطأ في Apigee Edge.
سجلّات معالج الرسائل
للتأكّد باستخدام سجلّات معالج الرسائل:
تحقَّق من سجلّات معالج الرسائل:
/opt/apigee/var/log/edge-message-processor/logs/system.log- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر مع الخطأ502. يمكنك استخدام سلسلة البحث التالية:grep -ri "response headers size exceeding"
- ستعثر على أسطر من
system.logمشابهة لما يلي. قد يختلف حجم رؤوس الاستجابة في حالتك:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
فور أن يتلقّى معالج الرسائل الاستجابة من الخادم الخلفي/الخادم الوجهة ويجد أنّ الحجم الإجمالي للعناوين أكبر من 25 كيلوبايت، يتوقف ويعرض الخطأ:
response headers size exceeding 25,600يعني ذلك أنّ إجمالي حجم الرأس أكبر من 25 كيلوبايت ويعرض Apigee الخطأ عندما يبدأ الحجم في تجاوز الحدّ المسموح به وهو 25 كيلوبايت مع رمز الخطأ كـ
protocol.http.TooBigHeaders
الدقة
تحديد الحجم
الخيار 1 [مُقترَح]: إصلاح تطبيق الخادم الوجهة لعدم إرسال حجم رؤوس يتجاوز الحدّ المسموح به في Apigee
- حلِّل سبب إرسال الخادم الوجهة المحدّد حجم عنوان الاستجابة أكبر من الحدّ المسموح به كما هو محدّد في الحدود.
- إذا لم يكن ذلك مرغوبًا فيه، عدِّل تطبيق الخادم الخلفي بحيث يرسل رؤوس الاستجابة التي يكون حجمها أقل من الـ حدّ المسموح به في Apigee Edge.
- تحقَّق مما إذا كان يمكن إرسال معلومات الرأس كجزء من نص الاستجابة.
- إذا كان ذلك ممكنًا، أرسِل أي معلومات كبيرة كنت تخطط لإرسالها كجزء من الرأس في نص الاستجابة. سيضمن ذلك عدم تجاوز الحدّ المسموح به لرأس الاستجابة.
CwC
الخيار 2 : استخدام خاصية CwC لزيادة الحدّ المسموح به لحجم عنوان الاستجابة
توفر Apigee خاصية CwC تتيح زيادة الحد المسموح به لحجم رؤوس الاستجابة. لمزيد من التفاصيل، يُرجى الاطّلاع على ضبط الحدود لمعالج الرسائل
الحدود
تتوقع Apigee ألا يرسل تطبيق العميل والخادم الخلفي أحجام رؤوس أكبر من الحدّ المسموح به كما هو موضّح في حجم رأس الطلب/الاستجابة في حدود Apigee Edge.
- إذا كنت مستخدم Public Cloud، يكون الحدّ الأقصى لحجم رؤوس الطلب والاستجابة كما هو موضّح في حجم رأس الطلب/الاستجابة في حدود Apigee Edge.
- إذا كنت مستخدم Private Cloud، ربما عدّلت الحدّ الأقصى التلقائي لحجم رؤوس الطلب والاستجابة (على الرغم من أنّ هذه الممارسة غير مُقترَحة). يمكنك تحديد الحدّ الأقصى لحجم رأس الاستجابة باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.
كيفية التحقّق من الحدّ الحالي؟
يوضّح هذا القسم كيفية التأكّد من تعديل الخاصية HTTPResponse.headers.limit بقيمة جديدة على معالِجات الرسائل.
- على جهاز معالج الرسائل، ابحث عن الخاصية
HTTPResponse.headers.limitفي الدليل/opt/apigee/edge-message-processor/confوتحقَّق من القيمة التي تم ضبطها كما هو موضّح أدناه:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- في ما يلي نموذج للنتيجة من الأمر أعلاه:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
في نموذج الناتج أعلاه، لاحظ أنّه تم ضبط الخاصية
HTTPResponse.headers.limitبالقيمة25kفيhttp.properties.يشير ذلك إلى أنّ الحدّ المسموح به لحجم حمولة الاستجابة الذي تم ضبطه في Apigee لـ Private Cloud هو 25 كيلوبايت.
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.
المعلومات التشخيصية التي يجب جمعها
اجمع المعلومات التشخيصية التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت مستخدم Public Cloud، قدِّم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أمر
curlالكامل المستخدَم لإعادة إظهار الخطأ502 - ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات
- الناتج الكامل للاستجابة من الخادم الوجهة/الخادم الخلفي مع حجم العناوين
إذا كنت مستخدم Private Cloud، قدِّم المعلومات التالية:
- رسالة الخطأ الكاملة التي ظهرت للطلبات التي تعذّر تنفيذها
- اسم المؤسسة
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات التي تعذّر تنفيذها
- أمر
curlالكامل المستخدَم لإعادة إظهار الخطأ502 - الناتج الكامل للاستجابة من الخادم الوجهة/الخادم الخلفي مع حجم العناوين
سجلّات الوصول إلى 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