شما در حال مشاهده اسناد 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 بازنشانی محتوا |
بدنه پاسخگویی | خطا | خطا |
هدر (تنظیم به غیر صفر) | خطا | خطا |
(روی کدگذاری پشتیبانی شده در 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:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
- کد خطا را در برابر زمان ترسیم کنید.
مطابق شکل زیر سلولی را انتخاب کنید که دارای
protocol.http.ResponseWithBody
کد خطا باشد.http.ResponseWithBody:اطلاعات مربوط به
protocol.http.ResponseWithBody
کد خطا را مشاهده خواهید کرد.http.ResponseWithBody مانند شکل زیر:روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
502
- منبع خطا:
target
- کد خطا:
protocol.http.ResponseWithBody
.
- کد وضعیت:
- اگر منبع خطا دارای مقدار
target
و کد خطا دارایprotocol.http.ResponseWithBody
مقدار باشد.http.ResponseWithBody، پس این نشان میدهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت204 No Content
یا205 Reset Content
با بدنه پاسخ و/یا ارسال کرده است. یکی از سرفصل های ذکر شده در قسمت علل احتمالی .
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یا:
- منتظر بمانید تا خطای
502 Bad Gateway
رخ دهد. یا - اگر میتوانید مشکل را تکرار کنید، تماس API را برقرار کرده و خطای
502 Bad Gateway
را تکرار کنید.
- منتظر بمانید تا خطای
اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:
- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
شما معمولاً همانگونه که در زیر نشان داده شده است، دقیقاً پس از ارسال درخواست به سرور هدف، خطا را در خطای
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
- خطا:
- به مرحله AX (Analytics Data Recorded) در Trace بروید و روی آن کلیک کنید.
به قسمت Phase Details ، Error Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:
- توجه داشته باشید که مقادیر 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:
- اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد HTTP
502 Bad Gateway
استفاده کنید. گزارش های دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
جایی که: ORG ، ENV ، و PORT# با مقادیر واقعی جایگزین میشوند.
- جستجو کنید تا ببینید آیا خطاهای
502
باprotocol.http.ResponseWithBody
کد خطا وجود دارد.http.ResponseWithBody در طول یک مدت زمان مشخص (اگر مشکل در گذشته اتفاق افتاده باشد) یا اینکه آیا درخواست هایی هنوز با502
شکست خورده است. اگر هر گونه خطای
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
- توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب
protocol.http.ResponseWithBody
وtarget
هستند. این نشان می دهد که خطا به این دلیل رخ داده است که سرور پشتیبان کد وضعیت204 No Content
یا205 Reset Content
با بدنه پاسخ و/یا یکی از سرصفحه های ذکر شده در علل احتمالی ارسال کرده است.
علت: بدنه پاسخ یا هدرها با پاسخ 204 از سرور باطن
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار Trace، یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر کد خطا
protocol.http.ResponseWithBody
است.http.ResponseWithBody و منبع خطا دارای مقدارtarget
است، پس این نشان می دهد که سرور باطن با کد وضعیت204 No Content
یا205 Reset Content
با بدنه پاسخ و/یا یکی از هدرهای ذکر شده پاسخ داده است. در علل احتمالی . برای تأیید اینکه آیا سرور پشتیبان واقعاً بدنه بار پاسخ و/یا یک یا چند سرصفحه ذکر شده در علل احتمالی را ارسال کرده است، میتوانید مراحل زیر را انجام دهید:
اگر کاربر Public Cloud هستید و میتوانید همان درخواست API را مستقیماً از هر یک از سیستمهای خود به سرور باطن ارسال کنید.
- اگر کاربر Private Cloud هستید، میتوانید همان درخواست API را مستقیماً از یکی از پردازشگرهای پیام مرتبط با سازمان و محیط خاصی که در آن خرابی مشاهده شده است، به سرور پشتیبان ارسال کنید.
پاسخ دریافت شده از سرور پشتیبان را بررسی کنید و بررسی کنید که حاوی یک بدنه بار پاسخ و/یا یک یا چند عنوان از هدرهای ذکر شده در بالا باشد. اگر بله، پس این دلیل این خطا است.
نمونه شماره 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.
- در تمام مثالهای بالا، سرور باطن
204 No Content
یا کد وضعیت205 Reset Content
با بدنه پاسخ و/یا یکی از هدرهای ذکر شده در علل احتمالی ارسال کرد. - بنابراین، 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
ارسال کند:
- بدنه بار پاسخگو
- و هر یک از هدرهای زیر:
-
Content-Length
-
Content-Encoding
-
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