מוצג המסמך של 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. | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- אפשר לבחור במסנן Proxy כדי לצמצם את קוד השגיאה.
- הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד התקלה
protocol.http.TooBigHeaders
בתור מוצגת למטה:יוצג מידע על קוד השגיאה
protocol.http.TooBigHeaders
כפי שמוצג בהמשך:לוחצים על הצגת היומנים ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד התקלה:
protocol.http.TooBigHeaders
.
- קוד סטטוס:
- אם מקור התקלה כולל את הערך
target
ואת הערך Fault הקוד מכיל את הערךprotocol.http.TooBigHeaders
, אז הוא מציין תגובת ה-HTTP משרת היעד/ שרת הקצה העורפי כוללת כותרות שהגודל שלהן גדול יותר מהמגבלה המותרת ב-Apigee Edge.
כלי המעקב
- מפעילים את סשן המעקב
וגם:
- צריך להמתין עד שהשגיאה
502 Bad Gateway
תתרחש, או - אם אפשר לשחזר את הבעיה, אפשר לשלוח קריאה ל-API ולשחזר את השגיאה
502 Bad Gateway
.
- צריך להמתין עד שהשגיאה
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- לעבור בין השלבים השונים במעקב ולאתר את מקום התקלה אירעה שגיאה.
בדרך כלל השגיאה הזו תופיע בתהליך בשם Error מיד אחרי שלב הבקשה נשלחה לשרת היעד כפי שמוצג בהמשך:
שימו לב לערכי השגיאה שמופיעים במעקב:
- שגיאה:
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 Data Recorded) במעקב וללחוץ עליו כדי לראות את הפרטים שקשורים אליו.
שימו לב לערכים הבאים:
כותרות של שגיאות ערך 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:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה ל-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
במהלך משך זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו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
הסיבה: גודל הכותרות בתגובה חורג מהמגבלה המותרת
אבחון
- קובעים את Fault Code (קוד שגיאה), Fault Source (מקור התקלה) וגודל מטען ייעודי (payload) של תגובה בשביל שגיאה שזוהתה באמצעות API Monitoring, כלי מעקב או יומני NGINX Access, כמו שמוסבר ב שלבי האבחון הנפוצים.
- אם ל-Fault Source יש את הערך
target
, זה אומר התגובה שנשלחה על ידי שרת היעד/הקצה העורפי ל-Apigee כוללת כותרות בגודל גדול יותר המגבלה המותרת ב-Apigee Edge. - אפשר לוודא שהתשובה מהיעד/הקצה העורפי כוללת כותרות שהגודל שלהן היה
חורגים מהמגבלה המותרת באחת מהשיטות הבאות:
הודעת שגיאה
כדי לבצע אימות באמצעות הודעת השגיאה:
אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, יש לעיין ב
faultstring
.faultstring
מציין כותרת התשובה חרגה מהמגבלה המותרת.הודעת שגיאה לדוגמה:
"faultstring":"response headers size exceeding 25,600"
בהודעת השגיאה שלמעלה, חשוב לשים לב ב
faultstring
ש יש כותרות שהגודל הכולל שלהן חורג מהמגבלה המותרת.הבקשה בפועל
כדי לאמת באמצעות הבקשה עצמה:
אם יש לכם גישה לבקשה שנשלחה בפועל לשרת היעד או לשרת העורפי, לאחר מכן מבצעים את השלבים הבאים:
- אם את/ה משתמש/ת בענן ציבורי/בענן פרטי, עליך להגיש בקשה ישירות לשרת הקצה העורפי משרת הקצה העורפי עצמו או מכל מחשב שממנו מותר לך לשלוח את הבקשה לקצה העורפי השרת.
- אם אתם משתמשים בענן פרטי, תוכלו גם להגיש את הבקשה משרת הקצה העורפי מאחד ממעבדי ההודעות.
- לבדוק את התגובה שהתקבלה משרת הקצה העורפי ובמיוחד לחשב ולאמת את הגודל הכולל של הכותרות שהועברו בתגובה.
אם מגלים שגודל הכותרות במטען הייעודי (payload) של התגובה. חורג מהמגבלה המותרת ב-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)
-
ברגע שמעבד ההודעות מקבל את התגובה מהקצה העורפי/היעד ואז מוצא שהגודל הכולל של הכותרות גדול מ-25KB. הוא מפסיק וגורם לשגיאה:
response headers size exceeding 25,600
הוא משתמע שהגודל הכולל של הכותרת גדול מ-25KB ו-Apigee זורקת את השגיאה כשהגודל מתחיל לחרוג מהמגבלה של 25KB עם קוד שגיאה בתור
protocol.http.TooBigHeaders
רזולוציה
תיקון הגודל
אפשרות מס' 1 [מומלץ]: תיקון האפליקציה של שרת היעד כך שלא תשלח את גודל הכותרות חריגה מהמגבלה של Apigee
- ניתוח הסיבה לכך ששרת היעד הספציפי שולח יותר גודל של כותרת התגובה מהמגבלה המותרת, כפי שמוגדר במגבלות.
- אם לא רוצים לעשות זאת, יש לשנות את אפליקציית השרת העורפי כך שהיא תשלח כותרות התגובה שהגודל שלהן קטן מהמגבלה המותרת ב Apigee Edge.
- בודקים אם אפשר לשלוח את פרטי הכותרת כחלק מגוף התשובה.
- אם אפשר, רצוי לשלוח מידע גדול יותר שתכננתם לשלוח כחלק את הכותרת בגוף התשובה. כך תבטיחו שלא תחרגו מהתשובה מגבלת כותרות.
CwC
אפשרות 2 : שימוש במאפיין CwC כדי להגדיל את מגבלת הגודל של כותרת התשובה
Apigee מספקת מאפיין CwC שמאפשר להגדיל את מגבלת הגודל של כותרות תגובה. פרטים נוספים זמינים במאמר הגדרת מגבלות למעבד ההודעות
מגבלות
Apigee מצפה שאפליקציית הלקוח ושרת הקצה העורפי לא ישלחו גודל הכותרות חורג מהמגבלה המותרת כפי שמתועד עבור גודל כותרת הבקשה/התגובה ב- מגבלות Apigee Edge.
- אם אתם משתמשים ב-Public Cloud, המגבלה המקסימלית גודל הכותרות של הבקשה והתגובה מתועד לפי גודל הכותרת של הבקשה/התגובה ב: מגבלות 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
.מציינת שהמגבלה של גודל המטען הייעודי (payload) של התגובה שהוגדר ב-Apigee לחשבונות פרטיים גודל הענן הוא 25KB.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, אפשר לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אוספים את פרטי האבחון הבאים ופונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curl
ששימשה לשחזור השגיאה502
- קובץ מעקב אחר בקשות ה-API
- פלט מלא של התגובה משרת היעד/שרת הקצה העורפי יחד עם גודל הכותרות
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב לבקשות ה-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