503 השירות לא זמין - יצירת מנהרה של שרת proxy נכשלה עם 403

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

תיאור הבעיה

אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 503 Service Unavailable עם את קוד השגיאה protocol.http.ProxyTunnelCreationFailed כתגובה לקריאות ל-API.

הודעת שגיאה

אפליקציית הלקוח מקבלת את קוד התגובה הבא:

HTTP/1.1 503 Service Unavailable

בנוסף, יכול להיות שתופיע הודעת השגיאה הבאה:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

העברת proxy ומינון

Apigee Edge מאפשרת לשרתי proxy ל-API לתקשר עם שרת הקצה העורפי שלך באמצעות שרת proxy שרת, כפי שמוסבר הגדרת שרת proxy להעברה. שרת ה-proxy פותח קובץ מאובטח (HTTPS) או לא מאובטח (HTTP) חיבור לשרת הקצה העורפי בהתאם לסוג שרת ה-proxy (מצוין על ידי הנכס HTTPClient.proxy.type) ומעביר את הנתונים בשני הכיוונים. התהליך הזה נקרא מנהור.

כברירת מחדל, ב-Apigee Edge משתמשים במנהור לכל תעבורת הנתונים. כדי להשבית מנהור, צריך להגדיר את HTTPClient.use.tunneling כ-false.

קוד שגיאה: Protocol.http.ProxyTunnelCreationFailed

Apigee Edge מחזירה את קוד השגיאה protocol.http.ProxyTunnelCreationFailed אם שרת ה-proxy לא יכול ליצור מנהרה בין Apigee Edge לבין שרת הקצה העורפי בגלל בעיות כגון חומת אש, הגבלות ACL (רשימת בקרת גישה), בעיות DNS, שרת קצה עורפי חוסר זמינות, זמנים קצובים לתפוגה וכדומה.

קוד הסטטוס ב-faultstring של התשובה מ-Apigee Edge בדרך כלל מציין סיבה אפשרית ברמה גבוהה שהובילה לשגיאה הזו.

תבנית Faultstring:

Proxy refused to create tunnel with response status STATUS_CODE

סיבות אפשריות לחלק מקוד הסטטוס שמופיע ב-faultstring:

הטבלה הבאה מתארת סיבות אפשריות בהתאם לקוד הסטטוס שצוין faultstring:

מחרוזת Faultstring תיאור
שרת ה-proxy סירב ליצור מנהרה עם סטטוס התגובה 403

403 - Forbidden

זה יכול לקרות בגלל הגבלות של חומת אש או ACL שהוגדרו שרת עורפי שמונע יצירת מנהרה.

שרת ה-proxy סירב ליצור מנהרה עם סטטוס התגובה 503

503 - Service Unavailable

מצב כזה יכול לקרות עקב בעיות DNS, הגבלות של חומת האש, שרתי הקצה העורפי אי-זמינות שמונעת יצירת מנהרה

שרת ה-proxy סירב ליצור מנהרה עם סטטוס התגובה 504

504 - Gateway Timeout

מצב כזה יכול לקרות אם יש זמנים קצובים לתפוגה במהלך יצירת מנהרה

בהתאם לקוד הסטטוס שמופיע ב-faultstring, צריך להשתמש שיטות המתאימות לפתרון הבעיה. במדריך הזה מוסבר איך לפתור בעיות הבעיה אם מופיע קוד הסטטוס 403 בfaultstring עבור קוד השגיאה protocol.http.ProxyTunnelCreationFailed.

גורמים אפשריים

שגיאה זו (קוד סטטוס 403) מתרחשת אם יש חומת אש או ACL (גישה רשימת בקרה) הגבלות שהוגדרו בשרת הקצה העורפי שמונעות את המנהרה שנוצר בין Apigee Edge לבין שרת הקצה העורפי על ידי שרת ה-proxy.

סיבה תיאור הוראות לפתרון בעיות עבור
שרת proxy סירב ליצור מנהרה עם סטטוס תגובה 403 שרת ה-proxy מסרב ליצור את המנהרה כי הוא מקבל את שם המארח של שרת ה-proxy במקום שם המארח של שרת הקצה העורפי בכותרת Host. משתמשי Edge בענן פרטי בלבד

שלבי אבחון נפוצים

יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:

כלי המעקב

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

  1. מפעילים את סשן המעקב ואז אחת משתי האפשרויות:
    • להמתין עד שהשגיאה תתבצע, או
    • אם הצלחתם לשחזר את הבעיה, יש לבצע את הקריאה ל-API כדי לשחזר את הבעיה 503 Service Unavailable עם Proxy refused to create tunnel with response status 403.
  2. מוודאים שהאפשרות Show all FlowInfos מופעלת:

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

    שימו לב לפרטים הבאים:

    שגיאה: Proxy refused to create tunnel with response status 403

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

    ( הצגת תמונה גדולה יותר)

    ( הצגת תמונה גדולה יותר)

  8. יופיעו הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source בתור protocol.http.ProxyTunnelCreationFailed ו-target בהתאמה, מה שמציין שהשגיאה הזו נגרמת כי מנהרת שרת ה-proxy היצירה נכשלה כי כותרת המארח הצפויה לא התקבלה.

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

NGINX

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

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

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

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

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

    שגיאה 503 ביומן הגישה ל-NGINX:

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

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

הסיבה: שרת ה-proxy סירב ליצור מנהרה עם סטטוס תגובה 403

אבחון

  1. קובעים את קוד התקלה ואת מקור התקלה של 503 Service Unavailable באמצעות יומני הגישה של Trace או NGINX, כמו שמוסבר ב שלבי האבחון הנפוצים.
  2. בודקים את הודעת השגיאה ובודקים את קוד הסטטוס שצוין בfaultstring בגלל כשל ביצירת המנהרה.
  3. בתרחיש הזה, קוד הסטטוס הוא 403, והמשמעות שלו היא אסור.
  4. המשמעות היא שאין מספיק זכויות או הרשאות ליצירת המנהרה. הפעולה הזו יכולה קורה בדרך כלל אם יש הגבלות של חומת אש או ACL (רשימת בקרת גישה) כדי למנוע את יצירת המנהרה.
  5. בודקים את כל ההגבלות על חומת האש או ה-ACL שהוגדרו בשרת הקצה העורפי יכולה למנוע את יצירת המנהרה.
  6. צריך לפתור את הבעיה בהתאם לסוג ההגבלות של חומת האש או ה-ACL המתאים.
  7. הנה דוגמה להגבלה של חומת האש כדי להסביר איך לפתור את הבעיה הבעיה:

    תרחיש: הגבלת חומת האש בשרת הקצה העורפי מצפה ש'כותרת המארח' צריכה תמיד להיות בתוקף מכיל את שם המארח של שרת הקצה העורפי

    אפשר להשתמש באחת מהדרכים הבאות כדי לקבוע את כותרת המארח שמועברת על ידי Apigee Edge:

    Trace

    כדי לקבוע את כותרת המארח באמצעות Trace:

    1. צריך לוודא שהשדה faultstring מכיל Proxy refused to create tunnel with response status 403 באמצעות מעקב, כמו שמוסבר ב שלבי האבחון הנפוצים.
    2. עוברים לשלב תחילת התהליך של יעד הבקשה ובודקים את כותרות של בקשות
    3. מאמתים את הערך של שם המארח שמצוין בכותרת המארח ב Request Headers (כותרות של בקשות).
    4. אם הכותרת מארח מכילה את שם המארח של שרת ה-proxy, זוהי את הסיבה לשגיאה הזו.
    5. הסיבה לכך היא שחומת האש מוגדרת בשרת הקצה העורפי לקבל את מבקשת רק אם כותרת המארח מכילה את שם שרת הקצה העורפי.
    6. כך ששרת ה-Proxy מנסה ליצור את המנהרה באמצעות שרת הקצה העורפי, נכשל עם השגיאה

      Proxy refused to create tunnel with response status 403.

      מעקב לדוגמה שמראה את כותרת המארח עם שם מארח של שרת proxy

      ( הצגת תמונה גדולה יותר)

      במעקב לדוגמה שמוצג למעלה, רואים שכותרת המארח מכילה השם של מארח ה-Proxy www.proxyserver.com. מכיוון שיש הגבלה של חומת אש שהוגדרה בשרת הקצה העורפי, שמצפה רק שם המארח של שרת הקצה העורפי שיהיה כלול ב כותרת המארח, מקבלים את הערך שגיאה Proxy refused to create tunnel with response status 403.

    tcpdump

    כדי לקבוע את כותרת המארח באמצעות tcpdump

    1. תיעוד tcpdump בשרת ה-proxy לבקשות שמגיעות מ- רכיב מעבד ההודעות של Apigee Edge עם הפקודה הבאה:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      מידע נוסף על השימוש בפקודה tcpdump זמין כאן tcpdump.

    2. ניתוח הנתונים של tcpdump באמצעות כלי Wireshark או כלי דומה של Google.
    3. הנה ניתוח לדוגמה של tcpdump באמצעות Wireshark:

      ( הצגת תמונה גדולה יותר)

    4. מספרי המנות 13, 14 ו-15 מראים שההודעה המעבד יוצר חיבור לשרת ה-proxy באמצעות פרוטוקול TCP תלת-כיווני תהליך לחיצת היד.
    5. בחבילה 16, מעבד ההודעות חיבר למארח שרת ה-proxy httpbin.org (מוצג בדוגמה שלמעלה).
    6. בוחרים את החבילה 16 ובודקים את תוכן החבילה לעומק באופן ספציפי, את כותרת המארח שמועברת לשרת ה-proxy על ידי ההודעה מעבד.

    7. הדוגמה שלמעלה מציגה את כותרת המארח httpin.org, הוא שם המארח של שרת ה-proxy. לכן, כאשר שרת ה-Proxy מנסה יוצרים את המנהרה עם שרת הקצה העורפי על ידי העברת כותרת המארח שלמעלה. httpin.org, הוא נכשל עם השגיאה Proxy refused to create tunnel with response status 403.

רזולוציה

תרחיש: הגבלת חומת האש בשרת proxy מצפה שכותרת המארח תמיד לכלול שם מארח של שרת עורפי

אם וידאתם שהשגיאה הזו נגרמת מפני שחומת האש בשרת הקצה העורפי מוגדרת כך שהיא מצפה שכותרת המארח תכלול תמיד שרת עורפי שם המארח, בזמן שמעבד ההודעות שולח את שם המארח של שרת ה-proxy, ואז מבצע את השלבים הבאים כדי לפתור את הבעיה:

  1. מגדירים את המאפיין use.proxy.host.header.with.target.uri כ-TRUE TargetEndpoint כפי שמוצג בדוגמה הבאה:

    הגדרה לדוגמה של נקודת קצה (TargetEndpoint):

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  2. מוודאים שהמאפיינים האחרים קשורים שרת proxy להעברה מוגדר במעבד ההודעות באופן הבא:

    1. בודקים את הקובץ /opt/apigee/customer/application/message-processor.properties בכל אחד ממעבדי ההודעות.
    2. ודאו שהמאפיינים הבאים מוגדרים בהתאם לתרחיש לדוגמה או לדרישות שלכם:

      ערכים לדוגמה של נכסים:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      

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

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

אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:

  • הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
  • שם הסביבה
  • חבילת proxy ל-API
  • קובץ מעקב אחר בקשות ה-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
    

קובצי עזר