502 Bad Gateway - ResponseWithBody

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

علامت

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

پیغام خطا

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

HTTP/1.1 502 Bad Gateway

علاوه بر این، ممکن است یکی از پیام های خطای زیر را مشاهده کنید:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

علل احتمالی

این خطا در صورتی رخ می دهد که پاسخ HTTP از سرور باطن به Apigee Edge یا 204 No Content یا 205 Reset Content باشد اما حاوی بدنه پاسخ و/یا یک یا چند مورد از هدرهای زیر باشد:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

طبق مشخصات RFC 7231، بخش 6.3.5: 204 No Content و RFC 7231، بخش 6.3.6: 205 Reset Content ، انتظار می رود هیچ محتوای اضافی به عنوان بخشی از بدنه بار پاسخ با کد وضعیت 204 No Content ارسال نشود. 204 No Content یا 205 Reset Content توسط سرور مبدا. سرصفحه‌های پاسخ مانند Content-Length ، Content-Encoding یا Transfer-Encoding اندازه، نوع یا قالب بار پاسخ را نشان می‌دهند.

بنابراین، Apigee Edge یک کد وضعیت 502 Bad Gateway را با protocol.http.ResponseWithBody کد خطا.http.ResponseWithBody در شرایط زیر به مشتری برمی‌گرداند:

کد وضعیت از سرور باطن
پاسخ از سرور باطن شامل 204 بدون محتوا 205 بازنشانی محتوا
بدنه پاسخگویی خطا خطا

هدر Content-Length

(تنظیم به غیر صفر)

خطا خطا

Content-Encoding

(روی کدگذاری پشتیبانی شده در Apigee Edge تنظیم کنید)

خطا بدون خطا
Transfer-Encoding خطا خطا

در اینجا دلایل احتمالی این خطا وجود دارد:

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
بدنه پاسخ یا هدرها با پاسخ 204 از سرور باطن سرور Backend یک پاسخ 204 No Content یا 205 Reset Content با بدنه پاسخ و/یا یک یا چند سرصفحه Content-Type ، Content-Encoding یا Transfer-Encoding ارسال می کند. کاربران Edge Public و Private Cloud

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

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

مانیتورینگ API

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

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

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

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

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

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

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

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

  9. از پنجره Logs به جزئیات زیر توجه کنید:
    • کد وضعیت: 502
    • منبع خطا: target
    • کد خطا: protocol.http.ResponseWithBody .
  10. اگر منبع خطا دارای مقدار target و کد خطا دارای protocol.http.ResponseWithBody مقدار باشد.http.ResponseWithBody، پس این نشان می‌دهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت 204 No Content یا 205 Reset Content با بدنه پاسخ و/یا ارسال کرده است. یکی از سرفصل های ذکر شده در قسمت علل احتمالی .

ابزار ردیابی

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

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

  3. یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  4. در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
  5. شما معمولاً همانگونه که در زیر نشان داده شده است، دقیقاً پس از ارسال درخواست به سرور هدف، خطا را در خطای flowinfo پیدا خواهید کرد:

    سناریوی شماره 1

    سناریوی شماره 1: سرور Backend با کد وضعیت 204 No Content حاوی بدنه پاسخ و/یا یکی از سرصفحه های فهرست شده در علل احتمالی پاسخ می دهد .

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

    • خطا: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    سناریوی شماره 2

    سناریوی شماره 2: سرور Backend با کد وضعیت 204 No Content حاوی بدنه پاسخ و/یا یکی از سرصفحه های فهرست شده در علل احتمالی پاسخ می دهد.

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

    • خطا: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. به مرحله AX (Analytics Data Recorded) در Trace بروید و روی آن کلیک کنید.
  7. به قسمت Phase Details ، Error Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

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

  8. توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب are protocol.http.ResponseWithBody و target هستند. این نشان می دهد که خطا به این دلیل رخ داده است که سرور پشتیبان کد وضعیت 204 No Content یا 205 Reset Content با بدنه پاسخ و/یا یکی از سرصفحه های ذکر شده در علل احتمالی ارسال کرده است.
    خطا ارزش
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

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

    نمونه خطای 502 از گزارش دسترسی NGINX:

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

    سرصفحه های پاسخ ارزش
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب protocol.http.ResponseWithBody و target هستند. این نشان می دهد که خطا به این دلیل رخ داده است که سرور پشتیبان کد وضعیت 204 No Content یا 205 Reset Content با بدنه پاسخ و/یا یکی از سرصفحه های ذکر شده در علل احتمالی ارسال کرده است.

علت: بدنه پاسخ یا هدرها با پاسخ 204 از سرور باطن

تشخیص

  1. کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار Trace، یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. اگر کد خطا protocol.http.ResponseWithBody است.http.ResponseWithBody و منبع خطا دارای مقدار target است، پس این نشان می دهد که سرور باطن با کد وضعیت 204 No Content یا 205 Reset Content با بدنه پاسخ و/یا یکی از هدرهای ذکر شده پاسخ داده است. در علل احتمالی .
  3. برای تأیید اینکه آیا سرور پشتیبان واقعاً بدنه بار پاسخ و/یا یک یا چند سرصفحه ذکر شده در علل احتمالی را ارسال کرده است، می‌توانید مراحل زیر را انجام دهید:

    1. اگر کاربر Public Cloud هستید و می‌توانید همان درخواست API را مستقیماً از هر یک از سیستم‌های خود به سرور باطن ارسال کنید.

    2. اگر کاربر Private Cloud هستید، می‌توانید همان درخواست API را مستقیماً از یکی از پردازشگرهای پیام مرتبط با سازمان و محیط خاصی که در آن خرابی مشاهده شده است، به سرور پشتیبان ارسال کنید.
    3. پاسخ دریافت شده از سرور پشتیبان را بررسی کنید و بررسی کنید که حاوی یک بدنه بار پاسخ و/یا یک یا چند عنوان از هدرهای ذکر شده در بالا باشد. اگر بله، پس این دلیل این خطا است.

      نمونه شماره 1

      نمونه شماره 1: پاسخ سرور Backend 204 با سربرگ رمزگذاری محتوا

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      در این نمونه، سرور باطن با 204 No Content و Content-Encoding: gzip پاسخ داد.

      نمونه شماره 2

      نمونه شماره 2: پاسخ سرور Backend 204 با سربرگ طول محتوا

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      در این نمونه، سرور باطن با کد وضعیت 204 No Content و Content-Length: 48 پاسخ داد.

      نمونه شماره 3

      نمونه شماره 3: پاسخ سرور Backend 205 با بدنه پاسخ

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      در این نمونه، سرور backend با کد وضعیت 205 Reset Content با بدنه پاسخ پاسخ داد This is a sample Response.

    4. در تمام مثال‌های بالا، سرور باطن 204 No Content یا کد وضعیت 205 Reset Content با بدنه پاسخ و/یا یکی از هدرهای ذکر شده در علل احتمالی ارسال کرد.
    5. بنابراین، Apigee Edge کد وضعیت 502 Bad Gateway را با protocol.http.ResponseWithBody کد خطا ارسال کرد.http.ResponseWithBody.

قطعنامه

هنگام ارسال پاسخ 204 No Content یا 205 Reset Content به Apigee Edge، اطمینان حاصل کنید که سرور Backend همیشه به مشخصات RFC 7231، بخش 6.3.6: 205 Reset Content پایبند باشد. یعنی سرور باطن نباید موارد زیر را به عنوان بخشی از پاسخ 204 No Content یا 205 Reset Content ارسال کند:

  1. بدنه بار پاسخگو
  2. و هر یک از هدرهای زیر:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

مشخصات

Apigee Edge با کد وضعیت 502 Bad Gateway و protocol.http.ResponseWithBody کد خطا پاسخ می دهد.http.ResponseWithBody اگر سرور backend یک پاسخ 204 No Content یا 205 Reset Content ارسال کند اما به مشخصات RFC زیر پایبند نباشد:

مشخصات
RFC 7231، بخش 6.3.5: 204 بدون محتوا
RFC 7231، بخش 6.3.6: 205 بازنشانی محتوا

نکات کلیدی قابل توجه

راه حل پیشنهادی این است که سرور پشتیبان را برای ارسال کد وضعیت 204 No Content و 205 Reset Content بدون بدنه پاسخ و هر یک از هدرها - Content-Length ، Content-Encoding و Transfer-Encoding و رعایت مشخصات RFC 7231، تعمیر کنید. بخش 6.3.5: 204 بدون محتوا و RFC 7231، بخش 6.3.6: 205 بازنشانی محتوا .

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

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

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

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

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

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

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