מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 502 Bad Gateway עם השגיאה
את הקוד protocol.http.Response405WithoutAllowHeader כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
בנוסף, יכול להיות שתופיע הודעת השגיאה הבאה:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}גורמים אפשריים
השגיאה הזו מתקבלת אם שרת הקצה העורפי מגיב בסטטוס 405 Method Not Allowed
בלי הכותרת Allow.
לפי המפרט
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed, צפוי ששרת המקור
חובה ליצור ולשלוח שדה כותרת Allow בתשובה 405 שמכילה
של משאב היעד שנתמך כרגע. אם לא, התשובה של Apigee היא
502 Bad Gateway וקוד השגיאה protocol.http.Response405WithoutAllowHeader.
| סיבה | תיאור | הוראות לפתרון בעיות עבור |
|---|---|---|
| תגובת 405 ללא כותרת אישור משרת הקצה העורפי | שרת הקצה העורפי שמעבד את בקשת ה-API מגיב עם קוד הסטטוס 405 ללא הכותרת Allow. |
משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- מתחברים לממשק המשתמש של Edge כמשתמש של התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד השגיאה
protocol.http.Response405WithoutAllowHeaderכפי שמוצג בהמשך:
מידע על קוד התקלה
protocol.http.Response405WithoutAllowHeaderמוצגת כפי שמוצג כאן:
לוחצים על צפייה ביומנים ומרחיבים את אחת מהבקשות שנכשלו כדי להציג מידע נוסף.
- בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
502 - מקור התקלה:
target - קוד התקלה:
protocol.http.Response405WithoutAllowHeader.
- קוד סטטוס:
- אם מקור התקלה הוא
targetו-קוד השגיאה הואprotocol.http.Response405WithoutAllowHeader, אז זה מציין שהקצה העורפי השרת הגיב עם קוד סטטוס405 Method Not Allowedללא הכותרתAllow.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את
פעילות מעקב
- צריך להמתין עד שהשגיאה
502 Bad Gatewayתתרחש, או - אם הצלחתם לשחזר את הבעיה, בצעו את הקריאה ל-API כדי לשחזר את הבעיה -
שגיאה אחת (
502 Bad Gateway)
- צריך להמתין עד שהשגיאה
מוודאים שהאפשרות Show all FlowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- צריך לעבור בין השלבים השונים במעקב ולאתר את מקום הכשל.
השגיאה בדרך כלל מופיעה בתהליך אחרי הבקשה נשלחה לשרת היעד בשלב הבא:
בודקים את ערך השגיאה במעקב.
במעקב הדוגמה שלמעלה מוצגת השגיאה כ-
Received 405 Response without Allow Header. מכיוון שהשגיאה עולה על ידי Apigee אחרי שהבקשה נשלחה לקצה העורפי שרת, מציין ששרת הקצה העורפי שלח את קוד הסטטוס של התשובה405בלי הכותרתAllow.- מנווטים לשלב AX (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
גוללים למטה לקטע כותרות שגיאה / תגובה בדף פרטי השלב. ולקבוע את ההגדרות של X-Apigee-fault-code ו-X-Apigee-fault-source כפי שמוצג כאן:
- הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source יוצגו בתור
protocol.http.Response405WithoutAllowHeaderו-targetבהתאמה, שמציין שהשגיאה נגרמת מפני שהקצה העורפי שלח את קוד הסטטוס של התשובה405בלי הכותרתAllow.כותרות של תשובות ערך X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים של ענן פרטי, אתם יכולים להשתמש ביומני הגישה ל-NGINX כדי לזהות
מידע חשוב על שגיאות HTTP
502. בודקים את יומני הגישה ל-NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
איפה: ORG, ORG ו-PORT# מוחלפים בערכים בפועל.
- מחפשים אם יש שגיאות
502עם קוד שגיאהprotocol.http.Response405WithoutAllowHeaderבמהלך פרק זמן ספציפי (אם שאירעה בעבר) או אם יש בקשות שעדיין לא נענו502 אם מופיעות שגיאות
502עם קוד השגיאה X-Apigee-fault-code שתואם ל שלprotocol.http.Response405WithoutAllowHeader, ואז קובעים של ערך X-Apigee-fault-source.דוגמה לשגיאה 502 מיומן הגישה ל-NGINX:
הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X-Apigee- קוד שגיאה ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
הסיבה: תגובת 405 ללא כותרת 'אפשר' משרת הקצה העורפי
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה עבור
502 Bad Gatewayבאמצעות API Monitoring, כלי מעקב או יומני גישה של NGINX, כמו שמוסבר שלבי האבחון הנפוצים. - אם קוד השגיאה הוא
protocol.http.Response405WithoutAllowHeaderוגם הערךtargetשל מקור התקלה מציין שלשרת הקצה העורפי השיב עם קוד סטטוס405ללא הכותרתAllow. לכן, Apigee מחזירה502 Bad Gatewayעם קוד שגיאהprotocol.http.Response405WithoutAllowHeader.
רזולוציה
אפשר להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:
שרת עורפי
אפשרות מס' 1: תיקון השרת העורפי כך שישלח קוד סטטוס 405 עם הכותרת Allow:
ודאו ששרת הקצה העורפי תמיד פועל בהתאם למפרט RFC 7231, סעיף 6.5.5: 405 Method Not Allowed ושולח עם הסטטוס
405על ידי הכללת רשימת השיטות המורשות כחלק מכותרתAllowכפי שמוצג בהמשך:Allow: HTTP_METHODS
- לדוגמה, אם שרת הקצה העורפי מאפשר
GET,POSTוגםHEADשיטות, אז צריך לוודא שהכותרתAllowמכילה אותם באופן הבא:Allow: GET, POST, HEAD
טיפול בתקלות
אפשרות 2: שימוש בטיפול בכשלים כדי לשלוח קוד סטטוס 405 עם הכותרת Allow מה-API שרת proxy:
אם שרת הקצה העורפי מחזיר את קוד הסטטוס 405 בלי Allow
אפשר להשתמש בטיפול בתקלות כדי להשיב בחזרה עם קוד הסטטוס 405
Allow מה-Proxy ל-API באופן הבא:
ליצור מדיניות כמו המדיניות של AssignMessage או במדיניות LiftFault ולהגדיר את קוד הסטטוס ל-
405עם הכותרתAllowופרמטר מותאם אישית הודעה.דוגמה למדיניות AssignMessage לשליחת קוד 405 עם כותרת Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
צריך ליצור
FaultRuleבTargetEndpoint, שמפעיל את המדיניות כשקיבלתי את השגיאה502עם קוד השגיאהprotocol.http.Response405WithoutAllowHeaderהגדרה לדוגמה של יעד קצה קצה (TargetEndpoint) שמציגה את FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- יש לשמור את השינויים האלו בגרסה חדשה של שרת ה-proxy ל-API ולפרוס את הגרסה.
- צריך לבצע את הקריאות ל-API ולוודא שקיבלת את קוד הסטטוס
405עם הכותרתAllow.
הגדרת הנכס
אפשרות מס' 3: הגדרת המאפיין במעבד ההודעות כדי למנוע מ-Apigee Edge חזרה לשגיאה 502
- אם אתם משתמשים בענן פרטי, אתם יכולים לעדכן את הנכס
HTTP.ignore.allow_header.for.405ל-trueכדי למנוע מ-Apigee Edge: מעלה שגיאה502, גם אם שרת הקצה העורפי מגיב עם405קוד הסטטוס בלי הכותרתAllow, בעזרת המדריך לביצוע פעולות: הגדרה של כותרת ההרשאה להתעלמות עבור מאפיין 405 במעבדי הודעות. - אם את/ה משתמש/ת בענן ציבורי , עליך לפנות לתמיכה של Apigee Edge
מפרט
Apigee מצפה לתגובת 405 Method Not Allowed משרת הקצה העורפי
עם הכותרת Allow בהתאם למפרטים הבאים:
| מפרט | |
|---|---|
| RFC 7231, סעיף 6.5.5: 405 Method Not Allowed | |
| RFC 7231, סעיף 7.4.1: מותר |
נקודות עיקריות שכדאי לשים לב אליהן
הפתרון המומלץ הוא לתקן את השרת העורפי כך שישלח את קוד הסטטוס 405
עם הכותרת Allow ולפעול בהתאם למפרט
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, צריך לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אם הבעיה נמשכת גם לאחר ביצוע ההוראות שלמעלה, יש לאסוף את הפריטים הבאים את נתוני האבחון, ואז פונים לתמיכה של Apigee Edge.
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curlשמשמשת לשחזור502 Bad Gatewayבאמצעות קוד השגיאהprotocol.http.Response405WithoutAllowHeader - קובץ מעקב עבור בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הסביבה
- חבילת proxy ל-API
- קובץ מעקב אחר בקשות ה-API
יומני גישה ל-NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
איפה: ORG, ORG ו-PORT# מוחלפים בערכים בפועל.
- יומני המערכת של מעבד ההודעות
/opt/apigee/var/log/edge-message-processor/logs/system.log