502 שער שגוי - תגובה 405 ללא כותרת הרשאה

כרגע מוצג התיעוד של 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:

  1. מתחברים ל-Edge UI כמשתמשים עם תפקיד מתאים.
  2. עוברים לארגון שבו רוצים לבדוק את הבעיה.

    רשימה נפתחת של ארגון
  3. עוברים לדף ניתוח > API Monitoring > חקירה.
  4. בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
  5. יש להציב את קוד השגיאה ביחס ל-Time.

  6. בוחרים תא שמכיל את קוד השגיאה protocol.http.Response405WithoutAllowHeader, כמו שמוצג בהמשך:

  7. מידע על קוד התקלה protocol.http.Response405WithoutAllowHeader מוצג באופן שמוצג למטה:

  8. כדי להציג מידע נוסף, לוחצים על הצגת היומנים ומרחיבים את אחת מהבקשות שנכשלו.

  9. בחלון Logs, שימו לב לפרטים הבאים:
    • קוד סטטוס: 502
    • מקור התקלה: target
    • קוד תקלה: protocol.http.Response405WithoutAllowHeader.
  10. אם Fault Source הוא target ו-Fault Code (קוד תקלה) הוא protocol.http.Response405WithoutAllowHeader, אז השרת העורפי הגיב עם קוד הסטטוס 405 Method Not Allowed בלי הכותרת Allow.

כלי המעקב

כדי לאבחן את השגיאה באמצעות כלי המעקב:

  1. מפעילים את סשן המעקב ואז
    • להמתין עד שהשגיאה 502 Bad Gateway תתרחש, או
    • אם הצלחת לשחזר את הבעיה, יש לבצע את הקריאה ל-API כדי לשחזר את הבעיה – שגיאה אחת (502 Bad Gateway)
  2. יש לוודא שהאפשרות Show allflowInfos מופעלת:

  3. בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
  4. אפשר לנווט בשלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
  5. השגיאה תוצג בדרך כלל ברצף אחרי השלב הבקשה שנשלחה לשרת היעד כפי שמוצג כאן:

  6. יש לשים לב לערך השגיאה מתוך המעקב.

    המעקב לדוגמה שלמעלה מציג את השגיאה כ-Received 405 Response without Allow Header. מכיוון ש-Apigee העלתה את השגיאה אחרי שהבקשה נשלחה לשרת הקצה העורפי, זה סימן לכך שהשרת העורפי שלח את קוד סטטוס התגובה 405 ללא הכותרת Allow.

  7. מנווטים לשלב AX (רישום נתונים ב-Analytics) במעקב ולוחצים עליו.
  8. גוללים למטה לקטע Error / Response Headers בחלונית שלב הפרטים ומוצאים את הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source.

  9. הערכים של X-Apigee-fault-code ושל X-Apigee-fault-source יופיעו כ-protocol.http.Response405WithoutAllowHeader וגם targetבהתאמה, כדי לציין שהשגיאה הזו נגרמת כי הקצה העורפי שלח את קוד סטטוס התגובה 405 ללא הכותרת Allow.
    כותרות תגובה Value
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:

  1. משתמשים בענן פרטי יכולים להשתמש ביומני גישה של NGINX כדי לזהות את המידע העיקרי על שגיאות HTTP 502.
  2. כדאי לבדוק את יומני הגישה של NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    היכן:ORG, ORG ו-PORT# מוחלפים בערכים בפועל.

  3. צריך לחפש כדי לראות אם יש שגיאות 502 עם קוד השגיאה protocol.http.Response405WithoutAllowHeader במהלך משך זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין נכשלות עם 502.
  4. אם מבחינים בשגיאות 502 כאשר X-Apigee-fault-code שתואם לערך protocol.http.Response405WithoutAllowHeader, קובעים את הערך של X-Apigee-fault-source.

    שגיאה 502 לדוגמה ביומן הגישה של NGINX:

    הרשומה לדוגמה שלמעלה מיומן הגישה של NGINX כוללת את הערכים הבאים עבור X-Apigee- fault-code ו-X-Apigee-fault-source:

    כותרות תגובה Value
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

הסיבה: תגובה 405 בלי הרשאת כותרת משרת קצה עורפי

אבחון

  1. קובעים את קוד ה-Fault ואת Fault Source (מקור התקלה) של 502 Bad Gateway באמצעות API Monitoring, כלי המעקב או יומני גישה של NGINX, כמו שמוסבר בשלבים הנפוצים לאבחון.
  2. אם קוד התקלה הוא protocol.http.Response405WithoutAllowHeader והערך 'מקור התקלה' הוא target, פירוש הדבר הוא שהשרת הקצה העורפי הגיב עם קוד סטטוס 405 ללא הכותרת Allow. לכן, Apigee מחזירה את התשובה 502 Bad Gateway עם קוד השגיאה protocol.http.Response405WithoutAllowHeader.

רזולוציה

יש להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:

שרת קצה עורפי

אפשרות מס' 1: תיקון השרת בקצה העורפי כך שישלח קוד סטטוס 405 עם הכותרת 'אישור':

  1. מוודאים ששרת הקצה העורפי פועל תמיד בהתאם למפרט RFC 7231, סעיף 6.5.5: 405 Method Not Allowed ושולח עם קוד הסטטוס 405. לשם כך, יש לכלול את רשימת השיטות המותרות כחלק מהכותרת Allow, כפי שמוצג בהמשך:

    Allow: HTTP_METHODS
    
  2. לדוגמה, אם שרת הקצה העורפי מאפשר שיטות GET, POST ו-HEAD, צריך לוודא שהכותרת Allow מכילה אותן באופן הבא:
    Allow: GET, POST, HEAD
    

טיפול בכשלים

אפשרות מס' 2: שימוש ב'טיפול ב-Fault' כדי לשלוח קוד סטטוס 405 עם הכותרת 'אישור' משרת ה-API של ה-API:

אם שרת הקצה העורפי מחזיר את קוד הסטטוס 405 ללא הכותרת Allow, אפשר להשתמש בטיפול בכשלים כדי להגיב באמצעות קוד הסטטוס 405 והכותרת Allow משרת ה-API שלכם באופן הבא:

  1. יוצרים מדיניות כמו assignMessage או RaiseFault, ומגדירים את קוד הסטטוס ל-405 עם הכותרת Allow והודעה בהתאמה אישית.

    דוגמה למדיניות הקצאה לשליחת הודעת שגיאה 405 עם כותרת ההרשאה:

    <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>
    
  2. צריך ליצור 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>
    
  3. שומרים את השינויים האלה בגרסה חדשה של שרת proxy של API ופורסים את הגרסה הקודמת.
  4. מבצעים את הקריאות ל-API ומוודאים שמקבלים את קוד הסטטוס 405 עם הכותרת Allow.

הגדרת הנכס

אפשרות מס' 3: הגדרת המאפיין במעבד ההודעות כדי למנוע מ-Apigee Edge להחזיר את שגיאת 502

  1. אם יש לך משתמש בענן פרטי, יש לך אפשרות לעדכן את המאפיין HTTP.ignore.allow_header.for.405 ל-true כדי למנוע מ-Apigee Edge להעלות את השגיאה 502, גם אם שרת הקצה העורפי מגיב עם קוד סטטוס 405 ללא הכותרת Allow באמצעות המדריך: הגדרה של כותרת ההרשאה להתעלמות בנכס 405 במעבדי הודעות.
  2. ל משתמשים ב-Public Cloud יש לפנות לתמיכה של Apigee Edge

מפרט

Apigee מצפה לתגובה 405 Method Not Allowed משרת הקצה העורפי עם הכותרת Allow בהתאם למפרטים הבאים:

מפרט
RFC 7231, סעיף 6.5.5: Method Not Allowed
RFC 7231, סעיף 7.4.1: אישור

נקודות עיקריות שכדאי לשים לב אליהן

הפתרון המומלץ הוא לתקן את שרת הקצה העורפי כך שישלח את קוד הסטטוס 405 עם הכותרת Allow ולפעול בהתאם למפרט RFC 7231, סעיף 6.5.5: 405 Method Not Allowed.

אם עדיין דרושה לכם עזרה מהתמיכה של Apigee, כדאי לעיין במאמר צריך לאסוף פרטי אבחון.

צריך לאסוף פרטי אבחון

אם הבעיה נמשכת גם אחרי שביצעתם את ההוראות שלמעלה, עליכם לאסוף את פרטי האבחון הבאים, ולאחר מכן לפנות לתמיכה של Apigee Edge.

אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:

  • שם הארגון
  • שם הסביבה
  • שם שרת proxy ל-API
  • משלימים את פקודת 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
    

קובצי עזר

טיפול בתקלות ב-Apigee