درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
نشانه
برنامه مشتری کد وضعیت HTTP 502 Bad Gateway را با کد خطای
protocol.http.TooBigLine بهعنوان پاسخ برای فراخوانیهای API دریافت میکند.
پیام خطا
برنامه کارخواه کد پاسخ زیر را دریافت میکند:
HTTP/1.1 502 Bad Gateway
علاوهبراین، ممکن است پیام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}علل احتمالی
این خطا زمانی رخ میدهد که اندازه خط پاسخ ارسالشده توسط سرور هدف/زیرینه به Apigee Edge بهعنوان بخشی از پاسخ HTTP بزرگتر از حداکثر حد مجاز در Apigee Edge باشد.
قبلاز اینکه به دلایل احتمالی این خطا بپردازیم، بیایید ببینیم «خط پاسخ» به چه معناست و چگونه میتوان اندازه آن را بررسی کرد.
آشنایی با «خط پاسخ»
پاسخ معمول HTTP از سه بخش تشکیل شده است:
- خط وضعیت (در Apigee بهعنوان خط پاسخ نامیده میشود)
- ( مجموعه سرصفحههای HTTP )
- [ Body ]
«خط پاسخ» از سه بخش تشکیل شده است: نسخه پروتکل و پساز آن کد وضعیت عددی و عبارت نوشتاری مرتبط آن، همانطور که در زیر نشان داده شده است:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
وقتی برنامه سرور هدف/زیرینه پاسخ HTTP را ارسال میکند، اولین خطی که
ارسال میشود نشاندهنده خط پاسخ است که در بالا توضیح داده شد. پساز آن،
سرصفحهها و بدنه/بار پاسخ میآید.نماگرفت نمونه زیر یک
curl درخواست معمولی، بخش درخواست، و بخش پاسخ (بههمراه
«خط پاسخ») را نشان میدهد.
آشنایی با اندازه «خط پاسخ»
در نمونهای که در بالا بحث شد، خط شروع (خط اول) در پاسخ که بهعنوان خط پاسخ نیز شناخته میشود به این صورت است:
HTTP/1.1 200 OK
این «خط پاسخ»
~15 bytesاندازه دارد زیرا حاوی15 ASCII charactersاست. ازآنجاییکه این مقدار در محدوده مجاز در Apigee Edge است، پاسخ بدون هیچ خطایی ازسوی Apigee Edge به مشتری برگردانده میشود.- بههمین ترتیب، اگر به
faultstringدر پیام خطای نشاندادهشده در بالا نگاه کنید، حاوی"response line size exceeding 2,048"است. این نشان میدهد که خط پاسخ در پاسخ HTTP ارسالشده توسط سرور هدف/پشتیبان از ۲۰۴۸ بایت فراتر رفته است.
درک «خط پاسخ» بزرگ
طبق تعریف خط وضعیت (که در اینجا به آن خط پاسخ گفته میشود) و درخواستها و پاسخهای معمول HTTP، اندازه بسیار کوچکتر از حد مجاز پیشفرض تعریفشده ۲ کیلوبایت در Apigee Edge خواهد بود، بنابراین ممکن است به حد مجاز نرسیم. بااینحال، در اینجا چند سناریو احتمالی وجود دارد که ممکن است از این حد فراتر بروید:
- سرور هدف/زیرینه سیستم HTTP نیست. ممکن است با پاسخی غیر از HTTP پاسخ دهد.
- سرور هدف/زیرینه مشکل دارد و «خط پاسخ» طولانی را بهعنوان بخشی از پاسخ HTTP ارسال میکند.
درباره این موضوع در دریافت خطای protocol.http.TooBigLine، «اندازه خط پاسخ از ۲٬۰۴۸ فراتر رفته است» بیشتر بخوانید.
در اینجا دلایل احتمالی این خطا آورده شده است:
| علت | شرح | دستورالعملهای عیبیابی برای موارد زیر قابلاجرا است |
|---|---|---|
| اندازه «خط پاسخ» از حد مجاز بیشتر است | اندازه خط پاسخ که سرور هدف/زیرینه بهعنوان بخشی از پاسخ HTTP به Apigee Edge ارسال میکند بزرگتر از حد مجاز در Apigee Edge است | کاربران «فضای ابری خصوصی و عمومی لبهای» |
مراحل متداول تشخیص خرابی
برای تشخیص این خطا، از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
پایش میانای برنامهسازی کاربردی
برای تشخیص خطا بااستفاده از «پایش API»:
- بهعنوان کاربری با نقش مناسب به سیستم Apigee Edge UI وارد شوید.
به سازمانی که میخواهید مشکل را در آن بررسی کنید بروید.
- به صفحه تجزیهوتحلیل > پایش API > بررسی پیمایش کنید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید انتخاب کنید.
- میتوانید فیلتر پراکسی را انتخاب کنید تا کد خطا را محدود کنید.
- رسم کد خطا دربرابر زمان.
سلولی را که کد خطای
protocol.http.TooBigLineرا دارد انتخاب کنید همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به کد خطا
protocol.http.TooBigLineرا همانطور که در زیر نشان داده شده است خواهید دید:
روی مشاهده گزارشها کلیک کنید و ردیف درخواست ناموفق را ازهم باز کنید.
- از پنجره گزارشها، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.TooBigLine.
- کد وضعیت:
- اگر منبع خطا مقدار
targetو کد خطا مقدارprotocol.http.TooBigLineرا داشته باشد، این نشان میدهد که اندازه «خط پاسخ» در پاسخ HTTP از سرور هدف/ زیرینه از حد مجاز در Apigee Edge بیشتر است.
ابزار ردیابی
- جلسه ردیابی
و یکی از این موارد را فعال کنید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد. یا - اگر میتوانید مشکل را بازتولید کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا بازتولید کنید.
- منتظر بمانید تا خطای
- یکی از درخواستهای ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
معمولاً خطا را در
flowinfoError (خطا) درست پساز مرحله Request sent to target server (درخواست به سرور هدف ارسال شد) همانطور که در زیر نشان داده شده است پیدا خواهید کرد:
مقادیر خطا را از ردیابی یادداشت کنید:
- خطا:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
این نشان میدهد که Apigee Edge (جزء «پردازشگر پیام») بهمحض دریافت پاسخ از سرور زیرینه، بهدلیل تجاوز اندازه «خط پاسخ» از حد مجاز، خطا را برمیگرداند.
- خطا:
پیام خطای ارسالشده به کارخواه را در مرحله پاسخ ارسالشده به کارخواه همانطور که در زیر نشان داده شده است خواهید دید:
- مقادیر خطا را از ردیابی یادداشت کنید:
- خطا:
502 Bad Gateway. - محتوای خطا:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- خطا:
همچنین میتوانید به فاز AX (دادههای Analytics ضبطشده) در ردیابی پیمایش کنید و روی آن کلیک کنید تا جزئیات خطا را ببینید.
مقدار موارد زیر را یادداشت کنید:
سرایندهای درخواست مقدار X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetمحتوای خطا : بدنه {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
برای تشخیص خطا بااستفاده از گزارشهای دسترسی NGINX:
- اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای دسترسی NGINX برای
تعیین اطلاعات کلیدی درباره خطاهای
502HTTP استفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logمکان: ORG، ENV، و PORT# با مقادیر واقعی جایگزین میشوند.
- جستجو کنید تا ببینید آیا درطول مدت مشخصی
502خطا وجود دارد یا نه (اگر مشکل در گذشته رخ داده است) یا اینکه آیا هنوز درخواستهایی با502ناموفق هستند یا نه. اگر خطاهای
502را با X-Apigee-fault-code مطابق با مقدارprotocol.http.TooBigLineپیدا کردید، مقدار X-Apigee-fault-source را تعیین کنید.
ورودی نمونه بالا از گزارش دسترسی NGINX مقادیر زیر را برای X- Apigee-fault-code و X-Apigee-fault-source: دارد:
سرایندهای پاسخ مقدار X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source target
دلیل: اندازه «خط پاسخ» از حد مجاز بیشتر است
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهدهشده بااستفاده از API Monitoring، ابزار Trace، یا گزارشهای دسترسی NGINX همانطور که در مراحل تشخیص متداول توضیح داده شده است تعیین کنید.
- اگر منبع خطا مقدار
targetرا داشته باشد، این نشان میدهد که اندازه «خط پاسخ» ارسالشده توسط برنامه سرور هدف/زیرینه به Apigee بزرگتر از حد مجاز در Apigee Edge است. میتوانید بااستفاده از یکی از روشهای زیر تأیید کنید که اندازه «خط پاسخ» از حد مجاز ۲ کیلوبایت فراتر رفته است:
پیام خطا
برای راستیآزمایی بااستفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.پیام خطای نمونه:
"faultstring":"response line size exceeding 2,048"
faultstringبالا نشان میدهد که اندازه «خط پاسخ» از حد مجاز ۲ کیلوبایت فراتر رفته است.درخواست واقعی
برای اعتبارسنجی بااستفاده از درخواست واقعی:
اگر به درخواست واقعی که به برنامه سرور هدف/زیرینه ارسال شده است دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه «خط پاسخ» را درستیسنجی کنید
- اگر متوجه شدید اندازه URI بیشتر از
حد مجاز در Apigee Edge است، این دلیل مشکل است.
پاسخ نمونه از سرور هدف/زیرینه:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
در مورد بالا، «خط پاسخ»
HTTP/1.1 200 1111…<trimmed>...11111111بزرگتر از ۲ کیلوبایت است، یعنی بیشتر از ۲ هزار نویسه ASCII دارد.اگر از کارخواه دیگری استفاده میکنید، میتوانید گزارشهای کارخواه را مرور کنید و اندازه «خط پاسخ» ارسالشده به Apigee Edge را پیدا کنید.
گزارشهای «پردازشگر پیام»
برای اعتبارسنجی بااستفاده از گزارشهای «پردازشگر پیام»:
اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای «پردازشگر پیام» برای اعتبارسنجی اینکه آیا اندازه «خط پاسخ» از حد مجاز در Apigee Edge فراتر رفته است یا نه استفاده کنید.
- شناسه پیام درخواست ناموفق را بااستفاده از «پایش میانای برنامهسازی کاربردی»، ابزار «ردیابی»، یا گزارشهای دسترسی NGINX که در مراحل تشخیص خرابی رایج توضیح داده شده است تعیین کنید.
شناسه پیام را در گزارش «پردازشگر پیام» جستجو کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.logخطوطی از
system.logرا مشابه با موارد زیر خواهید یافت:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
نوشتار
message = response line size exceeding 2,048در پیام خطای بالا نشان میدهد که اندازه «خط پاسخ» بیشاز ۲ کیلوبایت است. بنابراین، Apigee Edge استثنا را ایجاد میکند و کد وضعیت502را با کد خطایprotocol.http.TooBiglineبه برنامههای مشتری برمیگرداند.
وضوح
اندازه ثابت
گزینه ۱ [توصیه میشود]: برنامه سرور هدف/زیرینه را اصلاح کنید تا «خطوط پاسخ» با اندازه بزرگتر از حد مجاز ارسال نکند
- دلیل ارسال «خط پاسخ» با اندازه بیشتر از حد مجاز تعریفشده در حدود توسط مشتری خاص را تجزیهوتحلیل کنید.
- اگر مطلوب نیست، برنامه سرور هدف/زیرین خود را بهگونهای اصلاح کنید که «خط پاسخ» با اندازه کمتر از حد مجاز ارسال کند.
- اگر مطلوب است و میخواهید «خط پاسخ» با اندازه بیشتر از حد مجاز ارسال کنید، به گزینههای بعدی بروید.
CwC
گزینه ۲: استفاده از دارایی CwC برای افزایش حد «خط پاسخ»
Apigee دارایی CwC را ارائه میدهد که به آن امکان میدهد حد مجاز اندازه «خط پاسخ» را افزایش دهد. برای جزئیات بیشتر، تنظیم محدودیت «خط پاسخ» در «پردازشگر پیام» را ببینید.
محدودیتها
Apigee انتظار دارد که برنامه کارخواه و سرور پشتیبان «خطوط درخواست/پاسخ» با اندازههای بزرگتر از حد مجاز را که در محدودیت خط درخواست/پاسخ در محدودیتهای Apigee Edge مستند شده است ارسال نکنند.
- اگر کاربر «ابر عمومی» هستید، حداکثر محدودیت برای اندازه «خط درخواست و پاسخ» همانطور که برای اندازه «خط درخواست/پاسخ» در محدودیتهای Apigee Edge مستند شده است.
- اگر کاربر «ابر خصوصی» هستید، ممکن است حد حداکثر پیشفرض برای اندازه «خط درخواست و پاسخ» را تغییر داده باشید (اگرچه این کار توصیه نمیشود). با دنبال کردن دستورالعملهای نحوه بررسی محدودیت فعلی میتوانید حداکثر محدودیت اندازه «خط پاسخ» را تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه درستیسنجی کنید دارایی HTTPResponse.line.limit با مقدار جدیدی در «پردازشگرهای پیام» بهروز شده است.
- در ماشین «پردازشگر پیام»، دارایی
HTTPResponse.line.limitرا در/opt/apigee/edge-message-processor/confدایرکتوری جستجو کنید و بررسی کنید چه مقداری تنظیم شده است، همانطور که در زیر نشان داده شده است:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه از فرمان بالا به این صورت است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
در برونداد مثال بالا، توجه کنید که دارایی
HTTPResponse.line.limitبا مقدار2kدرhttp.propertiesتنظیم شده است.این نشان میدهد که حد اندازه «خط پاسخ» پیکربندیشده در Apigee برای Private Cloud ۲ کیلوبایت است.
اگر هنوز به کمک «پشتیبانی Apigee» نیاز دارید، به باید اطلاعات تشخیصی را جمعآوری کنید بروید.
باید اطلاعات تشخیص خرابی را جمعآوری کند
اطلاعات تشخیص خرابی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر «ابر عمومی» هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پراکسی میانای برنامهسازی کاربردی
- فرمان curl کامل استفادهشده برای بازتولید خطای
502 - فایل ردیابی برای درخواستهای 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