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 العام والخاص على السحابة الإلكترونية

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

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

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

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

  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. سترى الخطأ في استجابة الخطأ تم الإرسال إلى العميل المُرسَلة من 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-Error-code المطابق لقيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-code

    نموذج خطأ 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 كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كان مصدر الخطأ يتضمّن القيمة target، يعني ذلك أنّ الاستجابة التي يرسلها الخادم الهدف/الخلفية إلى Apigee تتضمّن عناوين يزيد حجمها عن الحد المسموح به في Apigee Edge.
  3. يمكنك التحقق من أنّ الاستجابة الواردة من الهدف/الخلفية تتضمن عناوين أكبر من الحد المسموح به باستخدام إحدى الطرق التالية:

    رسالة الخطأ

    للتأكُّد من استخدام رسالة الخطأ، اتّبِع الخطوات التالية:

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

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

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

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

    الطلب الفعلي

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

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

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

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

ضرورة جمع معلومات التشخيص

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:

إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • أكمِل أمر curl المستخدَم لإعادة إظهار الخطأ 502.
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
  • إكمال إخراج الاستجابة من الخادم الهدف/الخلفية مع حجم العناوين

إذا كنت مستخدم 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