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 מאפשר לשרתי ה-API של ה-API לתקשר עם שרת הקצה העורפי שלך דרך שרת proxy, כמו שמוסבר במאמר הגדרת שרת proxy להעברה. שרת ה-proxy פותח חיבור מאובטח (HTTPS) או לא מאובטח (HTTP) לשרת הקצה העורפי, בהתאם לסוג שרת ה-proxy (שמצוין על ידי הנכס HTTPClient.proxy.type) שבו נעשה שימוש ומעביר את הנתונים בשני הכיוונים. התהליך הזה נקרא מנהור.

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

קוד שגיאה: protocol.http.ProxyTunnelCreation חבר

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

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

תבנית מחרוזת כשל:

Proxy refused to create tunnel with response status STATUS_CODE

סיבות אפשריות לחלק מקוד הסטטוס שזוהה ב-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 allflowInfos מופעלת:

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

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

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

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

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

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

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

    כותרות תגובה Value
    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-code שתואם לערך של X-Apigee-fault-code , קובעים את הערך של X-Apigee-fault-code

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

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

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

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

אבחון

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

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

    ניתן לקבוע את כותרת המארח המועברת על ידי Apigee Edge באמצעות אחת מהדרכים הבאות:

    נתוני מעקב

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

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

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

  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
    

קובצי עזר