כרגע מוצג התיעוד של 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 |
ייתכן שהסיבה לכך היא הגבלות של חומת אש או ACL שהוגדרו בשרת הקצה העורפי שמונעות יצירת מנהרה. |
שרת ה-proxy סירב ליצור מנהרה עם סטטוס התגובה 503 |
יכולות להיות לכך כמה סיבות: בעיות ב-DNS, הגבלות של חומת אש, חוסר זמינות של שרת הקצה העורפי שמונע יצירת מנהרה |
שרת ה-proxy סירב ליצור מנהרה עם סטטוס תגובה 504 |
המצב הזה יכול לקרות אם יש חסימות זמניות במהלך יצירת המנהרה |
בהתאם לקוד הסטטוס שזוהה בfaultstring
, צריך להשתמש
בשיטות המתאימות כדי לפתור את הבעיה. המדריך הזה מסביר איך לפתור
את הבעיה אם מופיע קוד הסטטוס 403
בfaultstring
של קוד השגיאה protocol.http.ProxyTunnelCreationFailed
.
גורמים אפשריים
השגיאה הזו (קוד הסטטוס 403
) מתרחשת אם מוגדרות בשרת הקצה העורפי הגבלות של חומת אש או ACL (רשימת בקרת גישה), שמונעות את יצירת המנהרה בין Apigee Edge לשרת הקצה העורפי על ידי שרת ה-proxy.
סיבה | התיאור | ההוראות לפתרון בעיות הרלוונטיות עבור |
---|---|---|
שרת ה-proxy סירב ליצור מנהרה עם סטטוס תגובה 403 | שרת ה-proxy מסרב ליצור את המנהרה כי הוא מקבל את שם המארח של שרת ה-proxy במקום שם המארח של שרת הקצה העורפי בכותרת Host . |
למשתמשי ענן פרטי של Edge בלבד |
שלבים נפוצים באבחון
אפשר להשתמש באחד מהכלים/הטכניקות הבאים כדי לאבחן את השגיאה הזו:
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את סשן המעקב ומבצעים אחת מהפעולות הבאות:
- להמתין עד שהשגיאה תתרחש, או
- אם הצלחת לשחזר את הבעיה, יש לבצע את הקריאה ל-API ומשחזרים את הבעיה
503 Service Unavailable
עםProxy refused to create tunnel with response status 403
.
יש לוודא שהאפשרות Show allflowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בין השלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
השגיאה תופיע בדרך כלל אחרי השלב התהליך של בקשת יעד שהתחיל באופן הבא:
שימו לב לפרטים הבאים:
שגיאה:
Proxy refused to create tunnel with response status 403
- מנווטים לשלב AX (רישום נתונים ב-Analytics) במעקב ולוחצים עליו.
גוללים למטה לקטע Phase Details Response Headers (כותרות תגובה) כדי לקבוע את הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source.
הערכים של 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:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה של NGINX כדי לאתר את המידע העיקרי על שגיאות HTTP
503 Service Unavailable
. כדאי לבדוק את יומני הגישה של NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
היכן:ORG, ORG ו-PORT# מוחלפים בערכים בפועל.
- צריך לחפש כדי לראות אם יש שגיאות
503
עם קוד השגיאהprotocol.http.ProxyTunnelCreationFailed
במהלך משך זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין נכשלות עם503
. אם מבחינים ב
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
אבחון
- מאתרים את קוד התקלה ואת מקור התקלה של
503 Service Unavailable
באמצעות כלי המעקב או יומני הגישה של NGINX, כמו שמוסבר בשלבים הנפוצים לאבחון. - בודקים את הודעת השגיאה ומוצאים את קוד הסטטוס שצוין ב-
faultstring
לזיהוי כשל ביצירת המנהרה. - בתרחיש הזה, קוד הסטטוס הוא
403
, שמשמעותו אסור. - המשמעות היא שאין מספיק הרשאות או הרשאות כדי ליצור את המנהרה. הבעיה הזו עשויה להתרחש בדרך כלל אם יש הגבלות של חומת אש או ACL (רשימת בקרת גישה) שמונעות את יצירת המנהרה.
- בודקים את ההגבלות של חומת האש או ה-ACL שהוגדרו בשרת העורפי ושיכולות למנוע את יצירת המנהרה.
- בהתאם לסוג של חומת האש או ההגבלות של רשימות ה-ACL, צריך לפתור את הבעיה בהתאם.
ניקח לדוגמה הגבלה של חומת האש, כדי להסביר איך לפתור את הבעיה ואיך לפתור אותה:
תרחיש: הגבלת חומת אש בשרת קצה עורפי מצפה שכותרת המארח צריכה תמיד להכיל את שם המארח של שרת הקצה העורפי
ניתן לקבוע את כותרת המארח המועברת על ידי Apigee Edge באמצעות אחת מהדרכים הבאות:
נתוני מעקב
כדי לקבוע את כותרת המארח באמצעות נתוני מעקב:
- מוודאים שהשדה
faultstring
מכילProxy refused to create tunnel with response status 403
באמצעות נתוני מעקב, כמו שמוסבר בשלבים הנפוצים לאבחון. - עוברים לשלב תהליך הבקשה של היעד התחיל ובודקים את כותרות הבקשה.
- מאמתים את הערך של שם המארח שצוין בכותרת המארח בקטע Request Headers.
- אם הכותרת מארח מכילה את שם המארח של שרת ה-proxy, זו הסיבה לשגיאה.
- הסיבה לכך היא שחומת האש מוגדרת בשרת הקצה העורפי לקבל את הבקשות רק אם כותרת המארח מכילה את השם של שרת הקצה העורפי.
- לכן, כששרת ה-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
מצלמים
tcpdump
בשרת ה-proxy לבקשות שמגיעות מהרכיב של מעבד ההודעות של Apigee Edge באמצעות הפקודה הבאה:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
למידע נוסף על השימוש בפקודה
tcpdump
, אפשר לעיין במאמר tcpdump.- אפשר לנתח את הנתונים של
tcpdump
באמצעות הכלי Wireshark או כלי דומה. הנה ניתוח לדוגמה של tcpdump באמצעות Wireshark:
- מספרי החבילות 13, 14 ו-15 מראים שמעבד ההודעות יוצר חיבור לשרת ה-proxy באמצעות תהליך לחיצת יד של TCP תלת-כיווני.
- בחבילה 16, מעבד ההודעות התחבר למארח שרת ה-proxy
httpbin.org
(מוצג בדוגמה למעלה). בוחרים את החבילה 16 ובודקים את תוכן החבילה בפירוט, ובמיוחד את כותרת המארח שמועברת לשרת ה-proxy על ידי מעבד ההודעות.
- בדוגמה שלמעלה מוצג כותרת המארח
httpin.org
, שהיא שם המארח של שרת ה-proxy. לכן, כששרת ה-proxy מנסה ליצור את המנהרה עם שרת הקצה העורפי על ידי העברה של כותרת המארחhttpin.org
שלמעלה, הוא נכשל ומוצגת השגיאהProxy refused to create tunnel with response status 403
.
- מוודאים שהשדה
רזולוציה
תרחיש: הגבלת חומת אש בשרת proxy מצפה שכותרת המארח צריכה תמיד להכיל את שם המארח של שרת הקצה העורפי
אם וידאתם שהשגיאה הזו נגרמת כי חומת האש בשרת הקצה העורפי מוגדרת כך שהיא מצפה שכותרת המארח תכלול תמיד את שם המארח של השרת backend, בזמן שמעבד ההודעות שולח את שם המארח של backend, עליכם לבצע את השלבים הבאים כדי לפתור את הבעיה:
מגדירים את המאפיין
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>
ודאו שהמאפיינים האחרים הקשורים ל שרת proxy להעברה מוגדרים במעבד ההודעות באופן הבא:
- יש לבדוק את הקובץ
/opt/apigee/customer/application/message-processor.properties
בכל אחד ממעבדי ההודעות. ודאו שהמאפיינים הבאים מוגדרים בהתאם לתרחיש לדוגמה או לדרישות שלכם:
ערכים לדוגמה של מאפיינים:
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