502 Bad Gateway - TooBigHeaders

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه سرویس گیرنده کد وضعیت HTTP 502 Bad Gateway با protocol.http.TooBigHeaders کد خطا را دریافت می کند.http.TooBigHeaders به ​​عنوان پاسخی برای تماس های API.

پیغام خطا

برنامه مشتری کد پاسخ زیر را دریافت می کند:

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

مراحل تشخیص رایج

برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:

مانیتورینگ API

برای تشخیص خطا با استفاده از API Monitoring:

  1. به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
  2. به سازمانی که می‌خواهید در آن موضوع را بررسی کنید بروید.

  3. به صفحه Analyze > API Monitoring > Investigate بروید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
  5. می‌توانید فیلتر Proxy را برای محدود کردن کد خطا انتخاب کنید.
  6. کد خطا را در برابر زمان ترسیم کنید.
  7. مطابق شکل زیر سلولی را انتخاب کنید که دارای protocol.http.TooBigHeaders کد خطا باشد.http.TooBigHeaders:

    ( مشاهده تصویر بزرگتر )

  8. اطلاعات مربوط به protocol.http.TooBigHeaders کد خطا را مشاهده خواهید کرد.http.TooBigHeaders مانند شکل زیر:

    ( مشاهده تصویر بزرگتر )

  9. روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.

    ( مشاهده تصویر بزرگتر )

  10. از پنجره Logs به جزئیات زیر توجه کنید:
    • کد وضعیت: 502
    • منبع خطا: target
    • کد خطا: protocol.http.TooBigHeaders .
  11. اگر منبع خطا دارای مقدار target و کد خطا دارای protocol.http.TooBigHeaders مقدار باشد.http.TooBigHeaders، آنگاه نشان می‌دهد که پاسخ HTTP از سرور هدف/پشت‌اند دارای هدرهایی است که اندازه آنها از حد مجاز در Apigee Edge بیشتر است.

ابزار ردیابی

  1. جلسه ردیابی را فعال کنید و یا:
    1. صبر کنید تا خطای 502 Bad Gateway رخ دهد یا
    2. اگر می‌توانید مشکل را تکرار کنید، تماس API را برقرار کرده و خطای 502 Bad Gateway را تکرار کنید.
  2. یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  3. در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
  4. معمولاً این خطا را در جریانی با نام Error درست بعد از ارسال درخواست به سرور هدف مانند شکل زیر مشاهده خواهید کرد:

    ( مشاهده تصویر بزرگتر )

    به مقادیر خطا از trace توجه کنید:

    • خطا: 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 (Analytics Data Recorded) در trace بروید و روی آن کلیک کنید تا جزئیات مربوطه را ببینید.

    ( مشاهده تصویر بزرگتر )

    به ارزش موارد زیر توجه کنید:

    سرصفحه های خطا ارزش
    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. اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی 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 کد خطا وجود دارد.http.TooBigHeaders در طول یک مدت زمان خاص (اگر مشکل در گذشته اتفاق افتاده باشد) یا آیا درخواست هایی وجود دارد که هنوز با 502 ناموفق هستند.
  4. اگر هر گونه خطای 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.TooBigHeaders
    X-Apigee-fault-source target

علت: اندازه سرصفحه ها در پاسخ بیشتر از حد مجاز است

تشخیص

  1. کد خطا ، منبع خطا و اندازه بار پاسخ را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار Trace، یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. اگر منبع خطا دارای مقدار target باشد، این نشان می‌دهد که پاسخ ارسال شده توسط سرور هدف/بک‌اند به Apigee دارای سرصفحه‌هایی است که اندازه آنها بیشتر از حد مجاز در Apigee Edge است.
  3. با استفاده از یکی از روش‌های زیر می‌توانید تأیید کنید که پاسخ از هدف/بک‌اند دارای هدرهایی است که اندازه آنها بیشتر از حد مجاز است:

    پیغام خطا

    برای تأیید اعتبار با استفاده از پیام خطا:

    اگر به پیام خطای کامل دریافت شده از Apigee Edge دسترسی دارید، به faultstring مراجعه کنید. faultstring نشان می دهد که اندازه هدر پاسخ از حد مجاز فراتر رفته است.

    نمونه پیغام خطا:

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

    در پیغام خطای بالا، در faultstring توجه کنید که پاسخ دارای هدرهایی است که اندازه کل آنها از حد مجاز بیشتر است.

    درخواست واقعی

    برای اعتبارسنجی با استفاده از درخواست واقعی:

    اگر به درخواست واقعی ارسال شده به سرور هدف/بک‌اند دسترسی دارید، مراحل زیر را انجام دهید:

    1. اگر کاربر عمومی Cloud/Private Cloud هستید، مستقیماً از سرور باطن یا هر دستگاه دیگری که از آنجا مجاز به ارائه درخواست به سرور باطن هستید، به سرور باطن درخواست دهید.
    2. اگر کاربر Private 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 پرتاب می کند.http.TooBigHeaders

قطعنامه

اندازه را ثابت کنید

گزینه شماره 1 [توصیه می شود]: برنامه سرور مورد نظر را اصلاح کنید تا اندازه سرصفحه ها بیش از حد Apigee ارسال نشود

  1. دلیل ارسال سرور هدف خاص به اندازه سرصفحه پاسخ بیش از حد مجاز را که در Limits تعریف شده است، تجزیه و تحلیل کنید.
  2. اگر مطلوب نیست، برنامه سرور باطن خود را طوری تغییر دهید که هدرهای Response را که اندازه آنها کمتر از حد مجاز در Apigee Edge است ارسال کند.
  3. بررسی کنید که آیا اطلاعات سرصفحه را می توان به عنوان بخشی از بدنه پاسخ ارسال کرد.
  4. در صورت امکان، اطلاعات بزرگی را که قصد ارسال آن را دارید به عنوان بخشی از هدر در بدنه پاسخ ارسال کنید. این تضمین می کند که از محدودیت سرصفحه پاسخ تجاوز نخواهید کرد.

CwC

گزینه شماره 2: از ویژگی CwC برای افزایش محدودیت اندازه سرصفحه پاسخ استفاده کنید

Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه سرصفحه پاسخ را افزایش دهد. برای جزئیات به پیکربندی محدودیت‌ها برای پردازشگر پیام مراجعه کنید

محدودیت ها

Apigee انتظار دارد که برنامه کلاینت و سرور باطن، اندازه سرصفحه های بزرگتر از حد مجاز را همانطور که برای اندازه سرصفحه درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکنند.

  1. اگر کاربر Public Cloud هستید، حداکثر محدودیت برای اندازه سرصفحه Request و Response مطابق با اندازه Request/Response Header در Apigee Edge Limits است.
  2. اگر کاربر Private Cloud هستید، ممکن است حداکثر حد پیش‌فرض برای اندازه سرصفحه‌های درخواست و پاسخ را تغییر داده باشید (حتی اگر این یک عمل توصیه‌شده نیست). می‌توانید حداکثر محدودیت اندازه سرصفحه پاسخ را با دنبال کردن دستورالعمل‌های نحوه بررسی محدودیت فعلی تعیین کنید.

چگونه حد فعلی را بررسی کنیم؟

این بخش نحوه تأیید اینکه ویژگی HTTPResponse.headers.limit با یک مقدار جدید در پردازشگرهای پیام به روز شده است را توضیح می دهد.

  1. در دستگاه Message Processor، ویژگی 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 برای Private Cloud 25 کیلوبایت است.

اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:

اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط زیست
  • نام پروکسی API
  • دستور کامل curl که برای بازتولید خطای 502 استفاده می شود
  • فایل ردیابی برای درخواست های API
  • خروجی کامل پاسخ از سرور هدف/بک‌اند به همراه اندازه سرصفحه‌ها

اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل برای درخواست های ناموفق مشاهده شد
  • نام سازمان
  • نام محیط زیست
  • بسته پروکسی API
  • فایل ردیابی برای درخواست های API ناموفق
  • دستور کامل 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