502 Bad Gateway - TooBigHeaders

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

علامت

برنامه‌ی کلاینت، کد وضعیت HTTP 502 Bad Gateway را به همراه کد خطای protocol.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

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

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

نظارت بر API

برای تشخیص خطا با استفاده از مانیتورینگ API:

  1. به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
  2. به سازمانی که می‌خواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

    ( تصویر را بزرگتر ببینید )

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

    ( تصویر را بزرگتر ببینید )

  9. روی «مشاهده گزارش‌ها» کلیک کنید و ردیف مربوط به درخواست ناموفق را باز کنید.

    ( تصویر را بزرگتر ببینید )

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

ابزار ردیابی

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

    ( تصویر را بزرگتر ببینید )

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

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

    این نشان می‌دهد که Apigee Edge (مؤلفه پردازنده پیام) به محض دریافت پاسخ از سرور backend به دلیل اندازه هدر بیش از حد مجاز، خطا را ارسال می‌کند.

  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 (داده‌های تحلیلی ثبت‌شده) بروید و برای مشاهده جزئیات مربوطه روی آن کلیک کنید.

    ( تصویر را بزرگتر ببینید )

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

    هدرهای خطا ارزش
    کد خطای X-Apigee protocol.http.TooBigHeaders
    منبع گسل X-Apigee target
    محتوای خطا: بدنه {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

انجینکس

برای تشخیص خطا با استفاده از گزارش‌های دسترسی 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 وجود دارد یا خیر، یا اینکه آیا درخواست‌هایی وجود دارد که هنوز با خطای 502 با شکست مواجه می‌شوند.
  4. اگر هرگونه خطای 502 با X-Apigee-fault-code که با مقدار protocol.http.TooBigHeaders مطابقت دارد، پیدا کردید، مقدار X-Apigee-fault-source را تعیین کنید.

    نمونه خطای ۵۰۲ از لاگ دسترسی NGINX:

    ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:

    هدرهای خطا ارزش
    کد خطای X-Apigee protocol.http.TooBigHeaders
    منبع گسل X-Apigee target

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

تشخیص

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

    پیام خطا

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

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

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

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

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

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

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

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

    1. اگر شما یک کاربر ابر عمومی/ابر خصوصی هستید، مستقیماً از خود سرور بک‌اند یا هر دستگاه دیگری که از آنجا مجاز به ارسال درخواست به سرور بک‌اند هستید، درخواستی به سرور بک‌اند ارسال کنید.
    2. اگر شما یک کاربر ابر خصوصی هستید، می‌توانید درخواست را از طریق یکی از پردازنده‌های پیام به سرور backend نیز ارسال کنید.
    3. پاسخ دریافتی از سرور backend را بررسی کنید و به طور خاص اندازه کل هدرهای ارسالی در پاسخ را محاسبه و تأیید کنید.
    4. اگر متوجه شدید که اندازه هدرها در payload پاسخ بیشتر از حد مجاز در 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 هستید، می‌توانید از گزارش‌های Message Processor برای تأیید اینکه آیا اندازه هدرهای پاسخ از حد مجاز در 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. به محض اینکه پردازنده پیام، پاسخ را از سرور backend/target دریافت کند و متوجه شود که اندازه کل هدرها از 25 کیلوبایت بیشتر است، متوقف شده و خطای زیر را نمایش می‌دهد:

      response headers size exceeding 25,600

      این نشان می‌دهد که اندازه کل هدر بیش از ۲۵ کیلوبایت است و Apigee وقتی اندازه شروع به فراتر رفتن از حد مجاز ۲۵ کیلوبایت می‌کند، خطا را با کد خطا به صورت protocol.http.TooBigHeaders نمایش می‌دهد.

وضوح تصویر

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

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

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

سی دبلیو سی

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

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

محدودیت‌ها

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

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

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

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

  1. در دستگاه پردازشگر پیام، در دایرکتوری /opt/apigee/edge-message-processor/conf به دنبال ویژگی HTTPResponse.headers.limit بگردید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:
    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 برای ابر خصوصی ، ۲۵ کیلوبایت است.

اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمع‌آوری کنید» بروید.

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

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

اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط
  • نام پروکسی 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