شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 502 Bad Gateway
با protocol.http.TooBigHeaders
کد خطا را دریافت می کند.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 است. | کاربران Edge Public و Private Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
- میتوانید فیلتر Proxy را برای محدود کردن کد خطا انتخاب کنید.
- کد خطا را در برابر زمان ترسیم کنید.
مطابق شکل زیر سلولی را انتخاب کنید که دارای
protocol.http.TooBigHeaders
کد خطا باشد.http.TooBigHeaders:اطلاعات مربوط به
protocol.http.TooBigHeaders
کد خطا را مشاهده خواهید کرد.http.TooBigHeaders مانند شکل زیر:روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
502
- منبع خطا:
target
- کد خطا:
protocol.http.TooBigHeaders
.
- کد وضعیت:
- اگر منبع خطا دارای مقدار
target
و کد خطا دارایprotocol.http.TooBigHeaders
مقدار باشد.http.TooBigHeaders، آنگاه نشان میدهد که پاسخ HTTP از سرور هدف/پشتاند دارای هدرهایی است که اندازه آنها از حد مجاز در Apigee Edge بیشتر است.
ابزار ردیابی
- جلسه ردیابی را فعال کنید و یا:
- صبر کنید تا خطای
502 Bad Gateway
رخ دهد یا - اگر میتوانید مشکل را تکرار کنید، تماس API را برقرار کرده و خطای
502 Bad Gateway
را تکرار کنید.
- صبر کنید تا خطای
- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
معمولاً این خطا را در جریانی با نام Error درست بعد از ارسال درخواست به سرور هدف مانند شکل زیر مشاهده خواهید کرد:
به مقادیر خطا از trace توجه کنید:
- خطا:
response headers size exceeding 25,600
- error.class :
com.apigee.errors.http.server.BadGateway
این نشان می دهد که Apigee Edge (جزء پردازشگر پیام) به محض دریافت پاسخ از سرور باطن به دلیل اندازه سرصفحه بیش از حد مجاز، خطا را پرتاب می کند.
- خطا:
شکست را در پاسخ خطای Response Sent to Client ارسال شده توسط Apigee Edge مانند شکل زیر مشاهده خواهید کرد:
- به مقادیر خطا از ردیابی توجه کنید. ردیابی نمونه بالا نشان می دهد:
- خطا:
502 Bad Gateway
. - محتوای خطا:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- خطا:
به مرحله AX (Analytics Data Recorded) در trace بروید و روی آن کلیک کنید تا جزئیات مربوطه را ببینید.
به ارزش موارد زیر توجه کنید:
سرصفحه های خطا ارزش X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
محتوای خطا: بدنه {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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.TooBigHeaders
کد خطا وجود دارد.http.TooBigHeaders در طول یک مدت زمان خاص (اگر مشکل در گذشته اتفاق افتاده باشد) یا آیا درخواست هایی وجود دارد که هنوز با502
ناموفق هستند. اگر هر گونه خطای
502
با کد X-Apigee-fault-code مطابق با مقدارprotocol.http.TooBigHeaders
پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای 502 از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های خطا ارزش X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
علت: اندازه سرصفحه ها در پاسخ بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و اندازه بار پاسخ را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار Trace، یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر منبع خطا دارای مقدار
target
باشد، این نشان میدهد که پاسخ ارسال شده توسط سرور هدف/بکاند به Apigee دارای سرصفحههایی است که اندازه آنها بیشتر از حد مجاز در Apigee Edge است. - با استفاده از یکی از روشهای زیر میتوانید تأیید کنید که پاسخ از هدف/بکاند دارای هدرهایی است که اندازه آنها بیشتر از حد مجاز است:
پیغام خطا
برای تأیید اعتبار با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافت شده از Apigee Edge دسترسی دارید، به
faultstring
مراجعه کنید.faultstring
نشان می دهد که اندازه هدر پاسخ از حد مجاز فراتر رفته است.نمونه پیغام خطا:
"faultstring":"response headers size exceeding 25,600"
در پیغام خطای بالا، در
faultstring
توجه کنید که پاسخ دارای هدرهایی است که اندازه کل آنها از حد مجاز بیشتر است.درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارسال شده به سرور هدف/بکاند دسترسی دارید، مراحل زیر را انجام دهید:
- اگر کاربر عمومی Cloud/Private Cloud هستید، مستقیماً از سرور باطن یا هر دستگاه دیگری که از آنجا مجاز به ارائه درخواست به سرور باطن هستید، به سرور باطن درخواست دهید.
- اگر کاربر Private Cloud هستید، می توانید از یکی از پردازشگرهای پیام نیز درخواست را به سرور پشتیبان ارسال کنید.
- پاسخ دریافتی از سرور باطن را بررسی کنید و به طور خاص اندازه کل هدرهای ارسال شده در پاسخ را محاسبه و تأیید کنید.
اگر متوجه شدید که اندازه هدرها در بار پاسخ بیش از حد مجاز در 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 فراتر رفته است.
گزارش های پردازشگر پیام
برای تأیید اعتبار با استفاده از گزارشهای پردازشگر پیام:
اگر کاربر Private Cloud هستید، میتوانید از گزارشهای پردازشگر پیام برای تأیید اینکه اندازه سرصفحههای پاسخ از حد مجاز در 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)
به محض اینکه پردازشگر پیام پاسخی را از سرور باطن/هدف دریافت کرد و متوجه شد که حجم کل هدرها بیشتر از 25 کیلوبایت است، متوقف می شود و خطا را می اندازد:
response headers size exceeding 25,600
به این معنی است که حجم کل سرصفحه بیش از 25 کیلوبایت است و Apigee خطا را زمانی که اندازه شروع به تجاوز از حد مجاز 25 کیلوبایت می کند با کد خطا به عنوان
protocol.http.TooBigHeaders
پرتاب می کند.http.TooBigHeaders
قطعنامه
اندازه را ثابت کنید
گزینه شماره 1 [توصیه می شود]: برنامه سرور مورد نظر را اصلاح کنید تا اندازه سرصفحه ها بیش از حد Apigee ارسال نشود
- دلیل ارسال سرور هدف خاص به اندازه سرصفحه پاسخ بیش از حد مجاز را که در Limits تعریف شده است، تجزیه و تحلیل کنید.
- اگر مطلوب نیست، برنامه سرور باطن خود را طوری تغییر دهید که هدرهای Response را که اندازه آنها کمتر از حد مجاز در Apigee Edge است ارسال کند.
- بررسی کنید که آیا اطلاعات سرصفحه را می توان به عنوان بخشی از بدنه پاسخ ارسال کرد.
- در صورت امکان، اطلاعات بزرگی را که قصد ارسال آن را دارید به عنوان بخشی از هدر در بدنه پاسخ ارسال کنید. این تضمین می کند که از محدودیت سرصفحه پاسخ تجاوز نخواهید کرد.
CwC
گزینه شماره 2: از ویژگی CwC برای افزایش محدودیت اندازه سرصفحه پاسخ استفاده کنید
Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه سرصفحه پاسخ را افزایش دهد. برای جزئیات به پیکربندی محدودیتها برای پردازشگر پیام مراجعه کنید
محدودیت ها
Apigee انتظار دارد که برنامه کلاینت و سرور باطن، اندازه سرصفحه های بزرگتر از حد مجاز را همانطور که برای اندازه سرصفحه درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکنند.
- اگر کاربر Public Cloud هستید، حداکثر محدودیت برای اندازه سرصفحه Request و Response مطابق با اندازه Request/Response Header در Apigee Edge Limits است.
- اگر کاربر Private Cloud هستید، ممکن است حداکثر حد پیشفرض برای اندازه سرصفحههای درخواست و پاسخ را تغییر داده باشید (حتی اگر این یک عمل توصیهشده نیست). میتوانید حداکثر محدودیت اندازه سرصفحه پاسخ را با دنبال کردن دستورالعملهای نحوه بررسی محدودیت فعلی تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش نحوه تأیید اینکه ویژگی HTTPResponse.headers.limit
با یک مقدار جدید در پردازشگرهای پیام به روز شده است را توضیح می دهد.
- در دستگاه Message Processor، ویژگی
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 25 کیلوبایت است.
اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- دستور کامل
curl
که برای بازتولید خطای502
استفاده می شود - فایل ردیابی برای درخواست های API
- خروجی کامل پاسخ از سرور هدف/بکاند به همراه اندازه سرصفحهها
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- نام سازمان
- نام محیط زیست
- بسته پروکسی API
- فایل ردیابی برای درخواست های 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