درحال مشاهده اسناد 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 است. | کاربران «فضای ابری خصوصی و عمومی لبهای» |
مراحل متداول تشخیص خرابی
برای تشخیص این خطا، از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
پایش میانای برنامهسازی کاربردی
برای تشخیص خطا بااستفاده از «پایش API»:
- بهعنوان کاربری با نقش مناسب به سیستم Apigee Edge UI وارد شوید.
به سازمانی که میخواهید مشکل را در آن بررسی کنید بروید.
- به صفحه تجزیهوتحلیل > پایش API > بررسی پیمایش کنید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید انتخاب کنید.
- میتوانید فیلتر پراکسی را انتخاب کنید تا کد خطا را محدود کنید.
- رسم کد خطا دربرابر زمان.
سلولی را که کد خطای
protocol.http.TooBigHeadersرا دارد انتخاب کنید همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به کد خطا
protocol.http.TooBigHeadersرا همانطور که در زیر نشان داده شده است خواهید دید:
روی مشاهده گزارشها کلیک کنید و ردیف درخواست ناموفق را ازهم باز کنید.
- از پنجره گزارشها، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.TooBigHeaders.
- کد وضعیت:
- اگر منبع خطا مقدار
targetو کد خطا مقدارprotocol.http.TooBigHeadersرا داشته باشد، این نشان میدهد که پاسخ HTTP از سرور هدف/ زیرینه دارای سرایندهایی است که اندازه آنها از حد مجاز در Apigee Edge بیشتر است.
ابزار ردیابی
- جلسه ردیابی
و یکی از این موارد را فعال کنید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد، یا - اگر میتوانید مشکل را بازتولید کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا بازتولید کنید.
- منتظر بمانید تا خطای
- یکی از درخواستهای ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
معمولاً این خطا را در جاریسازیای بهنام Error (خطا) درست پساز مرحله Request sent to target server (درخواست به سرور هدف ارسال شد) همانطور که در زیر نشان داده شده است مشاهده خواهید کرد:
مقادیر خطا را از ردیابی یادداشت کنید:
- خطا:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
این نشان میدهد که Apigee Edge (جزء «پردازشگر پیام») بهمحض دریافت پاسخ از سرور زیرینه، بهدلیل فراتر رفتن اندازه سرایند از حد مجاز، خطا را ایجاد میکند.
- خطا:
خطا را در پاسخ ارسالشده به مشتری پاسخ خطا ارسالشده توسط Apigee Edge همانطور که در زیر نشان داده شده است میبینید:
- مقادیر خطا را از ردیابی یادداشت کنید. ردیابی نمونه بالا نشان میدهد:
- خطا:
502 Bad Gateway. - محتوای خطا:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- خطا:
به فاز AX (دادههای Analytics ضبطشده) در ردیابی بروید و روی آن کلیک کنید تا جزئیات مربوطه را ببینید.
مقدار موارد زیر را یادداشت کنید:
سرایندهای خطا مقدار X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetمحتوای خطا: بدنه {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
برای تشخیص خطا بااستفاده از گزارشهای دسترسی NGINX:
- اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای دسترسی NGINX برای
تعیین اطلاعات کلیدی درباره
502 Bad GatewayHTTP استفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logمکان: ORG، ENV، و PORT# با مقادیر واقعی جایگزین میشوند.
- جستجو کنید تا ببینید آیا درطول مدت مشخصی خطاهای
502با کد خطایprotocol.http.TooBigHeadersوجود دارد یا نه (اگر مشکل در گذشته رخ داده است) یا اینکه آیا درخواستهایی هنوز با502ناموفق هستند یا نه. اگر خطاهای
502را با X-Apigee-fault-code مطابق با مقدارprotocol.http.TooBigHeadersپیدا کردید، مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای ۵۰۲ از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX مقادیر زیر را برای X-Apigee-fault-code و X-Apigee-fault-source: دارد:
سرایندهای خطا مقدار X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
دلیل: اندازه سرایندهای پاسخ از حد مجاز بیشتر است
تشخیص
- کد خطا، منبع خطا، و اندازه بار پاسخ را برای خطای مشاهدهشده بااستفاده از «پایش میانای برنامهسازی کاربردی»، ابزار «ردیابی»، یا گزارشهای «دسترسی NGINX» که در مراحل تشخیص خرابی رایج توضیح داده شده است تعیین کنید.
- اگر منبع خطا مقدار
targetداشته باشد، این نشان میدهد که پاسخ ارسالی از سرور هدف/زیرینه به Apigee دارای سرایندهایی است که اندازه آنها از حد مجاز در Apigee Edge بیشتر است. - بااستفاده از یکی از روشهای زیر میتوانید تأیید کنید که پاسخ هدف/زیرینه دارای سرایندهایی است که اندازه آنها از حد مجاز بیشتر است:
پیام خطا
برای راستیآزمایی بااستفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.faultstringنشان میدهد که اندازه سرایند پاسخ از حد مجاز فراتر رفته است.پیام خطای نمونه:
"faultstring":"response headers size exceeding 25,600"
در پیام خطای بالا، در
faultstringتوجه کنید که پاسخ دارای سرایندهایی است که اندازه کل آنها از حد مجاز فراتر رفته است.درخواست واقعی
برای اعتبارسنجی بااستفاده از درخواست واقعی:
اگر به درخواست واقعی که به سرور هدف/زیرینه ارسال شده است دسترسی دارید، مراحل زیر را انجام دهید:
- اگر کاربر «ابر عمومی/ابر خصوصی» هستید، از سرور پشتیبان خود یا هر ماشین دیگری که اجازه دارید از آن به سرور پشتیبان درخواست ارسال کنید، مستقیماً به سرور پشتیبان درخواست ارسال کنید.
- اگر کاربر «ابر خصوصی» هستید، میتوانید درخواست را از یکی از «پردازشگرهای پیام» به سرور زیرینه نیز ارسال کنید.
- پاسخ دریافتی از سرور زیرینه را بررسی کنید و بهطور خاص اندازه کل سرایندهای ارسالشده در پاسخ را محاسبه و تأیید کنید.
اگر متوجه شدید که اندازه سرایندها در پایهبار پاسخ بیشتر از حد مجاز در 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 فراتر رفته است.
گزارشهای «پردازشگر پیام»
برای اعتبارسنجی بااستفاده از گزارشهای «پردازشگر پیام»:
اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای «پردازشگر پیام» برای اعتبارسنجی اینکه آیا اندازه سرایندهای «پاسخ» از حد مجاز در Apigee Edge فراتر رفته است یا نه استفاده کنید.
گزارشهای «پردازشگر پیام» را بررسی کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.log- جستجو کنید تا ببینید آیا درطول مدت زمان خاصی
502خطایی وجود دارد (اگر مشکل در گذشته رخ داده است) یا اینکه آیا هنوز درخواستهایی با502ناموفق هستند. میتوانید از رشته جستجوی زیر استفاده کنید:grep -ri "response headers size exceeding"
- خطوطی از
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)
-
بهمحض اینکه «پردازشگر پیام» پاسخ را از سرور پشتیبان/هدف دریافت کند و متوجه شود که اندازه کل سرایندها بیشتر از ۲۵ کیلوبایت است، متوقف میشود و این خطا را برمیگرداند:
response headers size exceeding 25,600این خطا به این معنی است که اندازه کل سرایند بیشتر از ۲۵ کیلوبایت است و Apigee وقتی اندازه از حد مجاز ۲۵ کیلوبایت فراتر میرود با کد خطای
protocol.http.TooBigHeadersخطا میدهد
وضوح
اندازه ثابت
گزینه ۱ [توصیهشده]: برنامه سرور هدف را اصلاح کنید تا سرایندهایی با اندازه بزرگتر از حد مجاز Apigee ارسال نکند
- دلیل ارسال اندازه سرایند پاسخ توسط سرور هدف خاص را بیشتر از حد مجاز تعریفشده در حدود تجزیهوتحلیل کنید.
- اگر مطلوب نیست، برنامه سرور زیرین خود را بهگونهای اصلاح کنید که سرصفحههای «پاسخ» را که اندازه آنها کمتر از حد مجاز در Apigee Edge است ارسال کند.
- بررسی کنید که آیا اطلاعات سرایند میتواند بهعنوان بخشی از بدنه پاسخ ارسال شود یا نه.
- درصورت امکان، هرگونه اطلاعات بزرگی را که قصد داشتید بهعنوان بخشی از سرایند در بدنه پاسخ ارسال کنید. این کار تضمین میکند که از حد مجاز سرصفحه پاسخ فراتر نروید.
CwC
گزینه #۲ : استفاده از دارایی CwC برای افزایش محدودیت اندازه سرایند پاسخ
Apigee دارایی CwC را ارائه میدهد که به آن امکان میدهد حد مجاز اندازه «سرایندهای پاسخ» را افزایش دهد. برای جزئیات بیشتر، پیکربندی محدودیتهای «پردازشگر پیام» را ببینید
محدودیتها
Apigee انتظار دارد که برنامه مشتری و سرور پشتیبان اندازههای سرایند بزرگتر از حد مجاز را که در محدودیتهای Apigee Edge برای «اندازه سرایند درخواست/پاسخ» مستند شده است ارسال نکنند.
- اگر کاربر «ابر عمومی» هستید، حداکثر حد مجاز برای اندازه سرصفحههای «درخواست و پاسخ» همانطور که برای اندازه سرصفحه «درخواست/پاسخ» در محدودیتهای Apigee Edge مستند شده است.
- اگر کاربر «ابر خصوصی» هستید، ممکن است حد حداکثر پیشفرض برای اندازه سرصفحههای «درخواست» و «پاسخ» را تغییر داده باشید (اگرچه این کار توصیه نمیشود). با دنبال کردن دستورالعملهای نحوه بررسی محدودیت فعلی میتوانید حداکثر محدودیت اندازه «سرایند پاسخ» را تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه درستیسنجی کنید دارایی HTTPResponse.headers.limit با مقدار جدیدی در «پردازشگرهای پیام» بهروز شده است.
- در ماشین «پردازشگر پیام»، دارایی
HTTPResponse.headers.limitرا در/opt/apigee/edge-message-processor/confدایرکتوری جستجو کنید و بررسی کنید چه مقداری تنظیم شده است، همانطور که در زیر نشان داده شده است:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه از فرمان بالا به این صورت است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
در برونداد مثال بالا، توجه کنید که دارایی
HTTPResponse.headers.limitبا مقدار25kدر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