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

أنت تعرض مستندات 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

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم باستخدام الدور المناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
  4. اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
  5. يمكنك اختيار فلتر الخادم الوكيل لتضييق نطاق رمز الخطأ.
  6. ارسم رمز الخطأ مقابل الوقت.
  7. اختَر خلية تتضمّن رمز الخطأ protocol.http.TooBigHeaders باعتباره كما هو موضح أدناه:

    ( عرض صورة أكبر)

  8. ستظهر لك معلومات عن رمز الخطأ. protocol.http.TooBigHeaders كما هو موضّح أدناه:

    ( عرض صورة أكبر)

  9. انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.

    ( عرض صورة أكبر)

  10. من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
    • رمز الحالة: 502
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.TooBigHeaders.
  11. إذا كان المصدر الخطأ يحتوي على القيمة target وقيمة الخطأ قيمة الرمز البرمجي هي protocol.http.TooBigHeaders، ويشير ذلك إلى تحتوي استجابة HTTP من الخادم الهدف/ الخادم الخلفي على عناوين أكبر عن الحد المسموح به في Apigee Edge

أداة التتبُّع

  1. تفعيل جلسة التتبُّع وإمّا:
    1. انتظِر إلى أن يحدث الخطأ 502 Bad Gateway.
    2. إذا كان بإمكانك إعادة إنتاج المشكلة، عليك طلب بيانات من واجهة برمجة التطبيقات وإعادة إظهار خطأ 502 Bad Gateway.
  2. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
  3. يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد موضع التعذُّر حدث.
  4. سيظهر لك عادةً هذا الخطأ في التدفق المسمى الخطأ بعد تم إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:

    ( عرض صورة أكبر)

    دوِّن قيم الخطأ من عملية التتبُّع:

    • الخطأ: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    وهذا يشير إلى أنّ Apigee Edge (مكوِّن معالج الرسائل) يعرض الخطأ كما يلي: فور تلقّيه الاستجابة من خادم الخلفية بسبب حجم العنوان تجاوز الحدّ الأقصى المسموح به

  5. ستظهر رسالة الخطأ في Response Sent to Client (تم إرسال الردّ إلى العميل). ردّ الخطأ من Apigee Edge على النحو الموضَّح أدناه:

    ( عرض صورة أكبر)

  6. دوِّن قيم الخطأ من عملية التتبُّع. يوضّح نموذج التتبّع أعلاه ما يلي:
    • الخطأ: 502 Bad Gateway.
    • محتوى الخطأ: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. انتقِل إلى مرحلة 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:

  1. إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي: لتحديد المعلومات الأساسية حول HTTP 502 Bad Gateway.
  2. تحقق من سجلات وصول NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.

  3. البحث لمعرفة ما إذا كانت هناك أي أخطاء 502 برمز الخطأ protocol.http.TooBigHeaders خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع 502
  4. إذا عثرت على أي أخطاء 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

السبب: حجم العناوين في الاستجابة أكبر من الحد المسموح به

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ وحجم حمولة الاستجابة تم رصد خطأ باستخدام سجلات مراقبة واجهة برمجة التطبيقات أو أداة التتبع أو NGINX Access كما هو موضح في خطوات التشخيص الشائعة:
  2. إذا كانت قيمة المصدر الخطأ هي target، فهذا يشير إلى أنّ تحتوي الاستجابة المرسلة من الخادم الهدف/الخلفية إلى Apigee على عناوين أكبر عن الحد المسموح به في Apigee Edge.
  3. يمكنك التحقق من أن الاستجابة من الهدف/الخلفية تحتوي على عناوين كان حجمها أكبر من الحد المسموح به باستخدام إحدى الطرق التالية:

    رسالة الخطأ

    للتحقق باستخدام رسالة الخطأ:

    إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى faultstring. تشير السمة faultstring إلى أنّ تجاوز حجم عنوان الاستجابة الحد المسموح به.

    نموذج لرسالة خطأ:

    "faultstring":"response headers size exceeding 25,600"
    

    في رسالة الخطأ أعلاه، لاحظ في faultstringأنّه تحتوي الاستجابة على عناوين يتجاوز حجمها الإجمالي الحد المسموح به.

    طلب فعلي

    للتحقّق من الصحة باستخدام الطلب الفعلي:

    إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى الخادم الهدف/الخلفية، ثم نفِّذ الخطوات التالية:

    1. إذا كنت من مستخدمي السحابة الإلكترونية العامة/السحابة الخاصة، يمكنك تقديم طلب. مباشرةً إلى خادم الخلفية من خادم الخلفية نفسه أو من أي خادم جهازك من حيث يُسمح لك بتقديم الطلب إلى الواجهة الخلفية الخادم.
    2. إذا كنت مستخدمًا خاصًا في Cloud، يمكنك أيضًا تقديم طلب إلى خادم الخلفية من أحد معالجات الرسائل.
    3. فحص الاستجابة الواردة من خادم الخلفية، وعلى وجه التحديد احتساب الحجم الإجمالي للعناوين التي تم تمريرها في الاستجابة والتحقق منها.
    4. إذا وجدتَ أن حجم العناوين في حمولة الاستجابة يتجاوز الحد المسموح به في 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.

    1. تحقَّق من سجلات "معالج الرسائل":

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. البحث لمعرفة ما إذا كانت هناك أي أخطاء 502 خلال إجراء معيّن المدة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا يزال يتعذّر التحقّق مع 502. يمكنك استخدام سلسلة البحث التالية:
      grep -ri "response headers size exceeding"
      
    3. ستظهر لك سطور من "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)
      
    4. بمجرد أن يحصل معالج الرسائل على رد من الخلفية/الهدف ووجدت أن الحجم الإجمالي للعناوين أكبر من 25 كيلوبايت، يتوقف ويعرض الخطأ:

      response headers size exceeding 25,600

      يشير ذلك إلى أنّ إجمالي حجم العناوين يتجاوز 25 كيلوبايت وفي Apigee تعرض الخطأ عندما يبدأ الحجم في تجاوز الحد الأقصى الذي يبلغ 25 كيلوبايت عند استخدام رمز خطأ باستخدام عنوان البريد الإلكتروني protocol.http.TooBigHeaders

الدقة

إصلاح الحجم

الخيار #1 [مقترَح]: إصلاح تطبيق الخادم المستهدَف لعدم إرسال حجم العناوين تخطّي حد Apigee

  1. تحليل السبب وراء إرسال الخادم المستهدف المحدد لحجم عنوان الاستجابة بشكل أكبر من الحد المسموح به كما هو محدد في الحدود.
  2. إذا لم يكن مرغوبًا فيه، عدِّل تطبيق خادم الخلفية لكي يرسل عناوين الاستجابة التي يقل حجمها عن الحد المسموح به في Apigee Edge:
  3. تحقَّق مما إذا كان من الممكن إرسال معلومات العنوان كجزء من نص الاستجابة.
  4. إذا كان ذلك ممكنًا، فأرسِل أي معلومات كبيرة كنت تخطط لإرسالها كجزء من العنوان في نص الاستجابة. سيضمن ذلك عدم تجاوز الردّ الحد المسموح به للرؤوس.

CwC

الخيار #2 : استخدام سمة "CwC" لزيادة الحد الأقصى لحجم عنوان الاستجابة

توفّر Apigee سمة CwC التي تسمح لها بزيادة حد حجم عناوين الاستجابة. للحصول على التفاصيل، يُرجى الاطّلاع على ضبط الحدود لمعالج الرسائل

الحدود

تتوقع Apigee عدم إرسال تطبيق العميل وخادم الخلفية أحجام العناوين أكبر من الحد المسموح به كما هو موثَّق لحجم عنوان الطلب/الاستجابة في حدود Apigee Edge:

  1. إذا كنت مستخدمًا في Cloud Cloud، فعندئذ يكون الحد الأقصى يتم توثيق حجم عناوين الطلب والاستجابة لحجم عنوان الطلب/الاستجابة في حدود Apigee Edge:
  2. إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية من المحتمل أنّك عدّلت الحد الأقصى التلقائي حد حجم عناوين الطلبات والاستجابة (على الرغم من أنه ليس ممارسة موصى بها). يمكنك تحديد الحد الأقصى لحجم عنوان الاستجابة من خلال اتباع الإرشادات في كيفية التحقّق من الحدّ الأقصى الحالي

كيف يمكن التحقّق من الحدّ الأقصى الحالي؟

يوضِّح هذا القسم كيفية إثبات أنّ الموقع الإلكتروني HTTPResponse.headers.limit يتضمّن تم تعديلها بقيمة جديدة في معالِجات معالجة الرسائل.

  1. ابحث عن الموقع على جهاز "معالج الرسائل". HTTPResponse.headers.limit في دليل /opt/apigee/edge-message-processor/conf والتحقق إلى يمكنك الاطّلاع على القيمة التي تم ضبطها على النحو الموضّح أدناه:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. في ما يلي نموذج النتيجة من الأمر أعلاه:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. في مثال الإخراج أعلاه، لاحِظ أنّ السمة 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