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 כמשתמש של התפקיד המתאים.
  2. עוברים לארגון שבו רוצים לחקור את הבעיה.

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

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

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

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

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

כלי המעקב

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

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

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

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

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

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

  9. הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source יוצגו בתור protocol.http.Response405WithoutAllowHeader ו-targetבהתאמה, שמציינת שהשגיאה נגרמת כי הקצה העורפי שלח את קוד הסטטוס של התשובה 405 בלי הכותרת Allow.
    כותרות של תשובות ערך
    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- קוד שגיאה ו-X-Apigee-fault-source:

    כותרות של תשובות ערך
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

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

אבחון

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

רזולוציה

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

שרת עורפי

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

  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: שימוש בטיפול בכשלים כדי לשלוח קוד סטטוס 405 עם הכותרת Allow מה-API שרת proxy:

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

  1. ליצור מדיניות כמו המדיניות של 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>
    
  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. אם את/ה משתמש/ת בענן ציבורי , עליך לפנות לתמיכה של 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
    

קובצי עזר

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