أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على رمز حالة 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 و 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
.
- انتظِر إلى أن يحدث الخطأ
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد موضع التعذُّر حدث.
سيظهر لك عادةً هذا الخطأ في التدفق المسمى الخطأ بعد تم إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:
دوِّن قيم الخطأ من عملية التتبُّع:
- الخطأ:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
وهذا يشير إلى أنّ Apigee Edge (مكوِّن معالج الرسائل) يعرض الخطأ كما يلي: فور تلقّيه الاستجابة من خادم الخلفية بسبب حجم العنوان تجاوز الحدّ الأقصى المسموح به
- الخطأ:
ستظهر رسالة الخطأ في Response Sent to Client (تم إرسال الردّ إلى العميل). ردّ الخطأ من Apigee Edge على النحو الموضَّح أدناه:
- دوِّن قيم الخطأ من عملية التتبُّع. يوضّح نموذج التتبّع أعلاه ما يلي:
- الخطأ:
502 Bad Gateway
. - محتوى الخطأ:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- الخطأ:
انتقِل إلى مرحلة AX (بيانات مسجَّلة في "إحصاءات Google") في عملية التتبُّع. وانقر عليه للاطّلاع على التفاصيل ذات الصلة.
دوِّن قيمة ما يلي:
عناوين الأخطاء القيمة X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
محتوى الخطأ: النص الأساسي {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
لتشخيص الخطأ باستخدام سجلات وصول NGINX:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي:
لتحديد المعلومات الأساسية حول HTTP
502 Bad Gateway
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.
- البحث لمعرفة ما إذا كانت هناك أي أخطاء
502
برمز الخطأprotocol.http.TooBigHeaders
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع502
إذا عثرت على أي أخطاء
502
في رمز خطأ X-Apigee مطابقة قيمةprotocol.http.TooBigHeaders
، ثم تحديد قيمة X-Apigee-fault-source.نموذج الخطأ 502 من سجلّ وصول NGINX:
يتضمن إدخال النموذج أعلاه من سجل وصول NGINX القيم التالية X-Apigee-fault-code وX-Apigee-fault-code
عناوين الأخطاء القيمة X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
السبب: حجم العناوين في الاستجابة أكبر من الحد المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم حمولة الاستجابة تم رصد خطأ باستخدام سجلات مراقبة واجهة برمجة التطبيقات أو أداة التتبع أو NGINX Access كما هو موضح في خطوات التشخيص الشائعة:
- إذا كانت قيمة المصدر الخطأ هي
target
، فهذا يشير إلى أنّ تحتوي الاستجابة المرسلة من الخادم الهدف/الخلفية إلى Apigee على عناوين أكبر عن الحد المسموح به في Apigee Edge. - يمكنك التحقق من أن الاستجابة من الهدف/الخلفية تحتوي على عناوين كان حجمها
أكبر من الحد المسموح به باستخدام إحدى الطرق التالية:
رسالة الخطأ
للتحقق باستخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى
faultstring
. تشير السمةfaultstring
إلى أنّ تجاوز حجم عنوان الاستجابة الحد المسموح به.نموذج لرسالة خطأ:
"faultstring":"response headers size exceeding 25,600"
في رسالة الخطأ أعلاه، لاحظ في
faultstring
أنّه تحتوي الاستجابة على عناوين يتجاوز حجمها الإجمالي الحد المسموح به.طلب فعلي
للتحقّق من الصحة باستخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى الخادم الهدف/الخلفية، ثم نفِّذ الخطوات التالية:
- إذا كنت من مستخدمي السحابة الإلكترونية العامة/السحابة الخاصة، يمكنك تقديم طلب. مباشرةً إلى خادم الخلفية من خادم الخلفية نفسه أو من أي خادم جهازك من حيث يُسمح لك بتقديم الطلب إلى الواجهة الخلفية الخادم.
- إذا كنت مستخدمًا خاصًا في 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:
سجلات معالج الرسائل
للتحقق من صحة استخدام سجلات معالج الرسائل:
إذا كنت أحد مستخدمي Private Cloud، يمكنك استخدام سجلات "معالج الرسائل" لتنفيذ ما يلي: التحقق مما إذا كان حجم رؤوس الاستجابة قد تجاوز الحد المسموح به في 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:
- إذا كنت مستخدمًا في Cloud Cloud، فعندئذ يكون الحد الأقصى يتم توثيق حجم عناوين الطلب والاستجابة لحجم عنوان الطلب/الاستجابة في حدود Apigee Edge:
- إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية من المحتمل أنّك عدّلت الحد الأقصى التلقائي حد حجم عناوين الطلبات والاستجابة (على الرغم من أنه ليس ممارسة موصى بها). يمكنك تحديد الحد الأقصى لحجم عنوان الاستجابة من خلال اتباع الإرشادات في كيفية التحقّق من الحدّ الأقصى الحالي
كيف يمكن التحقّق من الحدّ الأقصى الحالي؟
يوضِّح هذا القسم كيفية إثبات أنّ الموقع الإلكتروني 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 for Private يبلغ حجم السحابة الإلكترونية 25 كيلوبايت.
إذا كنت لا تزال بحاجة إلى مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المُستخدَم لإعادة إنتاج الخطأ502
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
- إخراج كامل للاستجابة من الخادم الهدف/الخلفية بالإضافة إلى حجم الرؤوس
إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم المؤسسة
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات التي تعذّر تنفيذها
- إكمال الأمر
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