מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 502 Bad Gateway
עם השגיאה
את הקוד protocol.http.ResponseWithBody
כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
בנוסף, ייתכן שתופיע אחת מהודעות השגיאה הבאות:
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
גורמים אפשריים
שגיאה זו מתרחשת אם תגובת ה-HTTP משרת הקצה העורפי ל-Apigee Edge היא
204 No Content
או 205 Reset Content
אבל הוא מכיל את התגובה
body ו/או אחת או יותר מהכותרות הבאות:
Content-Length
Content-Encoding
Transfer-Encoding
בהתאם למפרט
RFC 7231, סעיף 6.3.5: 204 ללא תוכן וגם
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן, צפוי שלא יהיה תוכן נוסף
צריך להישלח כחלק מגוף המטען הייעודי (payload) של התגובה עם קוד הסטטוס 204 No
Content
או 205 Reset Content
על ידי שרת המקור. כותרות התגובות
כמו Content-Length
, Content-Encoding
או
השדה Transfer-Encoding
מציין את הגודל, הסוג או הפורמט של המטען הייעודי (payload) של התגובה.
לכן, Apigee Edge מחזירה קוד סטטוס 502 Bad Gateway
עם
קוד השגיאה protocol.http.ResponseWithBody
ללקוח במסגרת
לנסיבות:
קוד סטטוס משרת קצה עורפי | ||
---|---|---|
התגובה משרת הקצה העורפי כוללת | 204 No Content | 205 איפוס תוכן |
גוף התשובה | שגיאה | שגיאה |
כותרת (מוגדר לערך שאינו אפס) |
שגיאה | שגיאה |
(מוגדר ל- קידוד נתמך ב-Apigee Edge) |
שגיאה | אין שגיאות |
Transfer-Encoding |
שגיאה | שגיאה |
אלה הסיבות האפשריות לשגיאה הזו:
סיבה | תיאור | הוראות לפתרון בעיות עבור |
---|---|---|
גוף התגובה או כותרות עם תגובת 204 משרת הקצה העורפי | שרת הקצה העורפי שולח 204 No Content או 205 Reset Content
תגובה עם גוף תשובה ו/או כותרת אחת או יותר Content-Type ,
Content-Encoding או Transfer-Encoding . |
משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד התקלה
protocol.http.ResponseWithBody
בתור מוצגת למטה:יוצג מידע על קוד השגיאה
protocol.http.ResponseWithBody
כפי שמוצג בהמשך:לוחצים על הצגת היומנים ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד התקלה:
protocol.http.ResponseWithBody
.
- קוד סטטוס:
- אם מקור התקלה כולל את הערך
target
ואת הערך Fault לקוד יש את הערךprotocol.http.ResponseWithBody
, ואז מציין שהשגיאה אירעה כי שרת הקצה העורפי שלח קוד סטטוס204 No Content
או205 Reset Content
עם גוף התשובה ו/או אחת מהכותרות שהוזכרו הקטע סיבות אפשריות.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את סשן המעקב
וגם:
- צריך להמתין עד שהשגיאה
502 Bad Gateway
תתבצע. או - אם אפשר לשחזר את הבעיה, אפשר לשלוח קריאה ל-API ולשחזר את השגיאה
502 Bad Gateway
.
- צריך להמתין עד שהשגיאה
מוודאים שהאפשרות Show all FlowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- לעבור בין השלבים השונים במעקב ולאתר את מקום התקלה אירעה שגיאה.
השגיאה בדרך כלל מופיעה בקטע
flowinfo
שגיאה אחרי השלב הבקשה נשלחה לשרת היעד כפי שמוצג בהמשך:תרחיש מס' 1
תרחיש מס' 1: תשובה של שרת עורפי היא קוד הסטטוס
204 No Content
שמכיל את גוף התגובה ו/או אחת מהכותרות המפורטות סיבות אפשריות.שימו לב לערכים הבאים במעקב:
- שגיאה:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
תרחיש מס' 2
תרחיש מס' 2: תשובה של שרת עורפי היא קוד סטטוס
204 No Content
שמכילות את גוף התגובה ו/או אחת מהאפשרויות הכותרות שמפורטות בקטע סיבות אפשריות.שימו לב לערכים הבאים במעקב:
- שגיאה:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- שגיאה:
- מנווטים לשלב AX (Analytics Data Recorded) במעקב ולוחצים עליה.
גוללים למטה לקטע פרטי שלב, כותרות של שגיאות ו לקבוע את הערכים של X-Apigee-fault-code ושל X-Apigee-fault-source כפי שמוצג בהמשך:
- חשוב לשים לב שהערכים של X-Apigee-fault-code ו-X-Apigee-fault-source
are protocol.http.ResponseWithBody
ו-target
בהתאמה. הדבר מציין שהשגיאה אירעה כי שרת הקצה העורפי שלח קוד הסטטוס204 No Content
או205 Reset Content
עם גוף התשובה ו/או אחת מהכותרות שהוזכרו בקטע סיבות אפשריות.שגיאה ערך X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
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.ResponseWithBody
במהלך משך זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו502
אם מופיעות שגיאות
502
בקוד X-Apigee-fault-code תואם לערך שלprotocol.http.ResponseWithBody
, ואז קובעים הערך של X-Apigee-fault-source.שגיאה 502 ביומן הגישה ל-NGINX:
הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X- Apigee-fault-code ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- חשוב לשים לב שהערכים של X-Apigee-fault-code ו-X-Apigee-fault-source
הם
protocol.http.ResponseWithBody
ו-target
בהתאמה. הדבר מציין שהשגיאה אירעה כי שרת הקצה העורפי שלח קוד הסטטוס204 No Content
או205 Reset Content
עם גוף התשובה ו/או אחת מהכותרות שהוזכרו בקטע סיבות אפשריות.
הסיבה: גוף התגובה או כותרות עם תגובת 204 משרת הקצה העורפי
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API יומני מעקב, כלי מעקב או NGINX, כפי שמוסבר ב שלבי האבחון הנפוצים.
- אם קוד השגיאה הוא
protocol.http.ResponseWithBody
וגם ל-Fault Source יש ערךtarget
, אז הוא מציין שהקצה העורפי השרת הגיב עם סטטוס204 No Content
או205 Reset Content
עם גוף התגובה ו/או אחת מהכותרות שהוזכרו סיבות אפשריות. כדי לבדוק אם שרת הקצה העורפי אכן שלח מטען ייעודי (payload) של תגובה ו/או או יותר מהכותרות שהוזכרו בקטע סיבות אפשריות, מבצעים את השלבים הבאים:
אם אתם משתמשים ב-Public Cloud, ואם אתם יכולים לשלוח את אותה בקשת API משרת הקצה העורפי ישירות מכל אחת מהמערכות שלכם.
- אם אתם משתמשים ב-Private Cloud, תוכלו לשלוח את אותה בקשת API שרת עורפי ישירות מאחד ממעבדי ההודעות המשויכים הארגון והסביבה שבהם זוהה הכשל.
לבדוק את התגובה שהתקבלה משרת הקצה העורפי ולוודא שהיא מכילה גוף המטען הייעודי (payload) של התגובה ו/או אחת או יותר מהכותרות שצוינו למעלה. אם כן, כלומר את הסיבה לשגיאה.
דוגמא מס' 1
דוגמה ראשונה: תגובת שרת עורפי 204 עם כותרת קידוד תוכן
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveבדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס של
204 No Content
וגםContent-Encoding: gzip
דוגמא מס' 2
דוגמה שנייה: תגובת שרת עורפי 204 עם כותרת באורך התוכן
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveבדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס של
204 No Content
וגםContent-Length: 48
דוגמא מס' 3
דוגמה מס' 3: תגובת שרת עורפי 205 עם גוף תגובה
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
בדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס
205 Reset Content
עם גוף התשובהThis is a sample Response.
- בכל הדוגמאות שלמעלה, שרת הקצה העורפי שלח
204 No Content
או קוד הסטטוס205 Reset Content
עם גוף התשובה או אחת מהכותרות שהוזכרו בקטע סיבות אפשריות. - לכן, Apigee Edge שלח את קוד הסטטוס
502 Bad Gateway
עם קוד השגיאהprotocol.http.ResponseWithBody
.
רזולוציה
מוודאים ששרת הקצה העורפי תמיד פועל בהתאם למפרט
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן, בעת שליחת 204 No Content
או את התשובה 205 Reset Content
ל-Apigee Edge. כלומר, השרת העורפי
אסור לשלוח את הפרטים הבאים כחלק מ-204 No Content
או
תגובת 205 Reset Content
:
- גוף המטען של התשובה
- וכל אחת מהכותרות הבאות:
Content-Length
Content-Encoding
Transfer-Encoding
מפרט
התגובה של Apigee Edge עם קוד הסטטוס 502 Bad Gateway
וקוד השגיאה
protocol.http.ResponseWithBody
אם שרת הקצה העורפי שולח
תגובה של 204 No Content
או 205 Reset Content
, אבל
לא תואם למפרטי RFC הבאים:
מפרט |
---|
RFC 7231, סעיף 6.3.5: 204 ללא תוכן |
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן |
נקודות עיקריות שכדאי לשים לב אליהן
הפתרון המומלץ הוא לתקן את השרת בקצה העורפי שישלח את 204 No Content
וקוד הסטטוס 205 Reset Content
ללא גוף התגובה, וגם
כותרות - Content-Length
, Content-Encoding
ו
Transfer-Encoding
ולפעול בהתאם למפרט
RFC 7231, סעיף 6.3.5: 204 ללא תוכן וגם
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, אפשר לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אוספים את פרטי האבחון הבאים ופונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curl
ששימשה לשחזור השגיאה502
- קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב אחר בקשות ה-API
יומני גישה ל-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