כרגע מוצג התיעוד של 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 בתור משתמשים עם תפקיד מתאים.
עוברים לארגון שבו רוצים לבדוק את הבעיה.
- עוברים לדף ניתוח > API Monitoring > חקירה.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- אפשר לבחור במסנן שרת Proxy כדי לצמצם את קוד השגיאה.
- יש להציב את קוד השגיאה ביחס ל-Time.
צריך לבחור תא שמכיל את קוד השגיאה
protocol.http.TooBigHeaders
כפי שמוצג כאן:המידע על קוד התקלה
protocol.http.TooBigHeaders
יופיע כפי שמוצג כאן:לוחצים על View Logs (הצגת היומנים) ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון Logs, שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד תקלה:
protocol.http.TooBigHeaders
.
- קוד סטטוס:
- אם ל-Fault Source יש את הערך
target
ו-Fault Code יש את הערךprotocol.http.TooBigHeaders
, אז תגובת ה-HTTP משרת היעד/ הקצה העורפי כוללת כותרות שגודלן גדול מהמגבלה המותרת ב-Apigee Edge.
כלי המעקב
- מפעילים את הפעלת המעקב
וגם:
- להמתין עד שהשגיאה
502 Bad Gateway
תתרחש, או - אם אפשר לשחזר את הבעיה, יש לבצע את הקריאה ל-API ולשחזר את השגיאה
502 Bad Gateway
.
- להמתין עד שהשגיאה
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בין השלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
שגיאה זו תופיע בדרך כלל בתהליך שנקרא שגיאה מיד אחרי השלב הבקשה נשלחה לשרת היעד, כפי שמוצג למטה:
שימו לב לערכי השגיאה מתוך המעקב:
- שגיאה:
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) במעקב ולוחצים עליו כדי לראות את הפרטים הקשורים.
חשוב לשים לב לערכים הבאים:
כותרות השגיאות Value 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 שתואם לערך של X-Apigee-fault-code , צריך לקבוע את הערך של X-Apigee-fault-codeשגיאה 502 לדוגמה ביומן הגישה של NGINX:
הרשומה לדוגמה שצוינה ביומן הגישה של NGINX כוללת את הערכים הבאים עבור X-Apigee-fault-code ו-X-Apigee-fault-code
כותרות השגיאות Value X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
הסיבה: גודל הכותרות בתגובה חורג מהמגבלה המותרת
אבחון
- קובעים את Fault Code, Fault Source ו-Response Payload size (גודל המטען הייעודי של התגובה) עבור השגיאה שנצפתה באמצעות יומני API Monitoring, הכלי למעקב או יומני גישה של NGINX, כפי שמוסבר בשלבי האבחון הנפוצים.
- אם ל-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
ניתן להסיק שהערך של Total Header Type גדול מ-25KB, ו-Apigee מקפץ את הודעת השגיאה כאשר הגודל מתחיל לחרוג מהמגבלה של 25KB עם קוד השגיאה
protocol.http.TooBigHeaders
רזולוציה
תיקון הגודל
אפשרות מס' 1 [מומלץ]: תיקון האפליקציה של שרת היעד כך שגודל הכותרות חורג מהמגבלה של Apigee
- ניתוח הסיבה שבגללה שרת היעד הספציפי שולח כותרת תגובה מהגודל המקסימלי המותר כפי שמוגדר במגבלות.
- אם היא לא רצויה, משנים את האפליקציה של שרת הקצה העורפי כך שהיא תשלח את כותרות התגובה שגודלן קטן מהמגבלה המותרת ב-Apigee Edge.
- בודקים אם אפשר לשלוח את פרטי הכותרת כחלק מגוף התגובה.
- אם אפשר, כדאי לשלוח מידע גדול שתכננת לשלוח כחלק מהכותרת בגוף התגובה. כך תבטיח שלא תחרוג מהמגבלה של כותרת התגובה.
CwC
אפשרות מס' 2 : שימוש בנכס CwC כדי להגדיל את מגבלת הגודל של כותרת התגובה
Apigee מספק מאפיין של CwC שמאפשר לו להגדיל את מגבלת הגודל של כותרות תגובה. מידע נוסף מופיע במאמר הגדרת מגבלות למעבד ההודעות.
מגבלות
Apigee מצפה שאפליקציית הלקוח ושרת הקצה העורפי לא ישלחו כותרות שגדולות מהמגבלה המותרת, כפי מתועד לגבי גודל הכותרת של בקשה/תגובה ב-Apigee Edge Limits.
- אם אתם משתמשים ב-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, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- צריך להשלים את הפקודה
curl
שמשמשת לשחזור השגיאה502
- קובץ מעקב לבקשות API
- יש להשלים את פלט התגובה משרת היעד/הקצה העורפי, יחד עם גודל הכותרות
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- זוהתה הודעת שגיאה מלאה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת שרת proxy ל-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