شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
ویدیوها
ویدیو | توضیحات |
---|---|
500 خطای سرور داخلی - ناشی از باطن | یک 500 Internal Server Error در زمان واقعی ناشی از سرور باطن را به همراه مراحل عیب یابی و رفع خطا نشان می دهد. |
علامت
برنامه مشتری کد وضعیت HTTP 500
را با پیام Internal Server Error
به عنوان پاسخی برای تماس های API دریافت می کند.
کد وضعیت HTTP 500
یک پاسخ خطای عمومی است. این بدان معناست که سرور با یک شرایط غیرمنتظره مواجه شده است که مانع از انجام درخواست شده است. این خطا معمولا زمانی توسط سرور برگردانده می شود که هیچ کد خطای دیگری مناسب نباشد.
پیام های خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
HTTP/1.1 500 Internal Server Error
علاوه بر این، ممکن است پیغام خطایی مشابه تصویر زیر مشاهده کنید:
نمونه شماره 1
نمونه پاسخ سرور باطن شماره 1
{"errorMessage":"Sorry either your e-mail or password didn't match.", "errorParameters":"{}", "errorCode":"500", "errorKey":"INVALID_EMAILPASSWORD"}
نمونه شماره 2
نمونه پاسخ سرور Backend شماره 2
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
علل احتمالی
500 Internal Server Error
ممکن است به دلایل مختلفی توسط سرور باطن بازگردانده شود. این کتاب راهنما نحوه عیب یابی با استفاده از مراحل رایج و رفع این خطا را بدون توجه به علت آن توضیح می دهد.
دلایل احتمالی این موضوع به شرح زیر است:
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
خطا در سرور باطن | سرور باطن ممکن است به دلایلی از کار بیفتد. | کاربران Edge Private و Public Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
روش شماره 1: استفاده از مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
کد خطا را در برابر زمان ترسیم کنید.
سلولی را انتخاب کنید که دارای کد خطا
messaging.adaptors.http.flow.ErrorResponseCode
باشد، همانطور که در زیر نشان داده شده است:اطلاعات مربوط به کد خطا
messaging.adaptors.http.flow.ErrorResponseCode
مطابق شکل زیر نمایش داده می شود:روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- شناسه پیام درخواستی
- کد وضعیت:
500
- منبع خطا:
target
- کد خطا:
messaging.adaptors.http.flow.ErrorResponseCode
ردیابی
روش شماره 2: با استفاده از ابزار Trace
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی و یکی را فعال کنید
- صبر کنید تا
500 Internal Server Error
با کد خطاmessaging.adaptors.http.flow.ErrorResponseCode
رخ دهد، یا - اگر میتوانید مشکل را تکرار کنید، با API تماس بگیرید تا
500 Internal Server Error
بازتولید شود.
- صبر کنید تا
اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:
- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
شما خطا را معمولاً در یک جریان پس از دریافت Response از مرحله سرور هدف، همانطور که در زیر نشان داده شده است، خواهید دید:
- در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
به بخش Phase Details Response Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source و X-Apigee-Message-ID را مطابق شکل زیر تعیین کنید:
- به مقادیر X-Apigee-fault-code ، X-Apigee-fault-source و X-Apigee-Message-ID توجه کنید:
سرصفحه های پاسخ | ارزش |
---|---|
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
X-Apigee-fault-source | target |
X-Apigee-Message-ID | MESSAGE_ID |
NGINX
روش شماره 3: استفاده از گزارش های دسترسی NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:
- اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به
500 Internal Server Error
استفاده کنید. گزارش های دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
- جستجو کنید تا ببینید آیا
500
خطا با کد خطاmessaging.adaptors.http.flow.ErrorResponseCode
در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا اینکه آیا درخواست هایی هنوز با500
ناموفق هستند. اگر هر
500
خطا با کد X-Apigee-fault-code مطابق با مقدارmessaging.adaptors.http.flow.ErrorResponseCode
پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای 500 از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه ها ارزش X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
X-Apigee-fault-source target
علت: خطا در سرور باطن
تشخیص
500 Internal Server Error
پاسخ داده شده توسط سرور باطن می تواند به دلایل مختلفی ایجاد شود. شما باید هر موقعیت را به طور مستقل تشخیص دهید.
- کد خطا، منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار ردیابی یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر منبع خطا
target
باشد و کد خطاmessaging.adaptors.http.flow.ErrorResponseCode
باشد، این نشان می دهد که خطا توسط سرور پشتیبان برگردانده شده است. - برای تشخیص علت مشکل می توانید از یکی از مراحل زیر استفاده کنید:
ردیابی
استفاده از Trace:
اگر یک جلسه Trace برای شکست دارید، مراحل زیر را انجام دهید:
- در Trace، درخواست API را انتخاب کنید که با
500 Internal Server Error
شکست خورده است. همانطور که در شکل زیر نشان داده شده است ، پاسخ دریافت شده از فاز سرور هدف را از درخواست API ناموفق انتخاب کنید:
به قسمت Phase Details به پایین بروید و Response Content را که حاوی پاسخ سرور backend است، بررسی کنید.
نمونه محتوای پاسخ:
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
در پاسخ بالا، توجه داشته باشید که پیغام خطا از سرور باطن، Not Authorised است. این نشان می دهد که کاربر ممکن است اعتبار نامعتبر داشته باشد و به همین دلیل است که این خطا را دریافت می کند.
با سرور باطن تماس بگیرید
برقراری تماس مستقیم با سرور پشتیبان:
می توانید یک تماس مستقیم با سرور پشتیبان برقرار کنید و:
- اگر همان پاسخ
500 Internal Server Error
را دریافت میکنید، اعتبارسنجی کنید که در زمان ارسال درخواست از طریق Apigee Edge - پیام خطا (پاسخ) دریافت شده از سرور باطن را بررسی کنید
مراحل زیر را برای برقراری تماس مستقیم با سرور باطن انجام دهید:
- اطمینان حاصل کنید که تمام هدرهای مورد نیاز، پارامترهای پرس و جو و هر گونه اعتباری که باید به عنوان بخشی از درخواست به سرور باطن ارسال شود را دارید.
- اگر سرویس Backend برای عموم قابل دسترسی است، می توانید از دستور
curl
، Postman یا هر REST Client دیگری استفاده کنید و مستقیماً API سرور باطن را فراخوانی کنید. اگر سرور پشتیبان فقط از طریق پردازشگرهای پیام قابل دسترسی است، می توانید از دستور
curl
، Postman یا هر REST Client دیگری استفاده کنید و API سرور باطن را مستقیماً از پردازشگر پیام فراخوانی کنید.- اگر سرویس باطن واقعاً
500 Internal Server Error
برمیگرداند اعتبار سنجی کنید و پیام خطا (پاسخ) ارسال شده توسط سرور باطن را بررسی کنید و علت این خطا را مشخص کنید.
گزارش های سرور Backend
استفاده از گزارش های سرور باطن
- گزارش های سرور باطن را بررسی کنید و سعی کنید جزئیات بیشتری در مورد خطا و علت آن به دست آورید.
- در صورت امکان، حالت اشکال زدایی را در سرور باطن فعال کنید تا جزئیات بیشتری در مورد خطا و علت دریافت کنید.
- در Trace، درخواست API را انتخاب کنید که با
بررسی کنید که آیا از زنجیره پراکسی در نقطه پایانی هدف خاص پروکسی API ناموفق استفاده می کنید یا خیر. یعنی اگر سرور هدف/نقطه پایانی هدف پروکسی دیگری را در Apigee Edge فراخوانی کند. برای تعیین این:
اگر ردیابی درخواست ناموفق را دارید، به مرحله درخواست ارسال شده به سرور مورد نظر بروید و روی Show Curl کلیک کنید.
- پنجره Curl for Request Sent to Target Server باز می شود که از آن می توانید نام مستعار میزبان سرور مورد نظر را تعیین کنید.
- نقطه پایانی هدف پروکسی API خود را بررسی کنید و بررسی کنید که آیا URL سرور پشتیبان یا نام میزبان در سرور هدف به پروکسی دیگری یا سرور باطن شما اشاره دارد یا خیر.
- اگر نام مستعار میزبان سرور هدف به یک نام مستعار میزبان مجازی اشاره می کند، آنگاه زنجیره پروکسی است. در این مورد، باید تمام مراحل بالا را برای پروکسی زنجیرهای تکرار کنید تا زمانی که مشخص کنید چه چیزی واقعاً باعث
500 Internal Server Error
شده است. در این موارد،500 Internal Server Error
ممکن است در سایر پروکسیهای زنجیرهای نیز در مراحل دیگر رخ دهد که میتوان با استفاده از دستورالعملهای ارائهشده در این کتاب بازی یا در راهنمای خطای سرور داخلی 500 تشخیص داده و برطرف کرد. - اگر نام مستعار میزبان سرور هدف به سرور باطن شما اشاره می کند، سپس به Resolution بروید.
قطعنامه
اگر مشخص شد که خطای 500
از سرور بکاند میآید، با تیم سرور بکاند خود کار کنید تا مشکل را به درستی برطرف کنید.
در مثالی که در بالا توضیح داده شد، ممکن است مجبور شوید برای رفع این مشکل از کاربران بخواهید اعتبارنامه معتبری را پاس کنند.
نکات کلیدی قابل توجه
- پیام خطای واقعی که توسط سرور باطن برای
500 Internal Server Error
برگردانده شده است، تنها در صورتی قابل مشاهده است که جلسه ردیابی درخواست های ناموفق را ضبط کرده باشید. - پاسخ سرور پشتیبان به دلایل امنیتی در مانیتورینگ API، گزارشهای دسترسی NGINX یا گزارشهای پردازشگر پیام ثبت نمیشود.
- میتوانید گزارشهای سرور پشتیبان را مرور کنید یا حالت اشکالزدایی را در باطن فعال کنید تا جزئیات بیشتری در مورد
500 Internal Server Error
دریافت کنید و/یا پیام خطای بازگردانده شده توسط سرور باطن را مشاهده کنید.
باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و با پشتیبانی Apigee Edge تماس بگیرید.
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- برای بازتولید خطای
500
دستورcurl
کامل کنید - فایل ردیابی حاوی درخواست هایی با
500 Internal Server Error
- اگر
500
خطا در حال حاضر رخ نمی دهد، دوره زمانی را با اطلاعات منطقه زمانی که500
خطا در گذشته رخ داده است، ارائه دهید.
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- سازمان، نام محیط و نام پروکسی API که برای آنها
500
خطا مشاهده می کنید - بسته پروکسی API
- فایل ردیابی حاوی درخواست هایی با
500 Internal Server Error
- گزارش های دسترسی 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
- دوره زمانی با اطلاعات منطقه زمانی که
500
خطا رخ داده است.