מוצג המסמך של 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 |
זה יכול לקרות בגלל הגבלות של חומת אש או 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 all FlowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- לעבור בין השלבים השונים במעקב ולאתר את מקום התקלה אירעה שגיאה.
השגיאה תופיע בדרך כלל לאחר השלב תחילת תהליך היעד של הבקשה כפי שמוצג בהמשך:
שימו לב לפרטים הבאים:
שגיאה:
Proxy refused to create tunnel with response status 403
- מנווטים לשלב AX (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
גוללים למטה לקטע פרטי שלב כותרות תגובה ו לקבוע את הערכים של X-Apigee-fault-code ושל X-Apigee-fault-source בתור מוצגת למטה:
יופיעו הערכים של 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:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה ל-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- תואם לערך של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
אבחון
- קובעים את קוד התקלה ואת מקור התקלה של
503 Service Unavailable
באמצעות יומני הגישה של Trace או NGINX, כמו שמוסבר ב שלבי האבחון הנפוצים. - בודקים את הודעת השגיאה ובודקים את קוד הסטטוס
שצוין ב
faultstring
בגלל כשל ביצירת המנהרה. - בתרחיש הזה, קוד הסטטוס הוא
403
, והמשמעות שלו היא אסור. - המשמעות היא שאין מספיק זכויות או הרשאות ליצירת המנהרה. הפעולה הזו יכולה קורה בדרך כלל אם יש הגבלות של חומת אש או ACL (רשימת בקרת גישה) כדי למנוע את יצירת המנהרה.
- בודקים את כל ההגבלות על חומת האש או ה-ACL שהוגדרו בשרת הקצה העורפי יכולה למנוע את יצירת המנהרה.
- צריך לפתור את הבעיה בהתאם לסוג ההגבלות של חומת האש או ה-ACL המתאים.
הנה דוגמה להגבלה של חומת האש כדי להסביר איך לפתור את הבעיה הבעיה:
תרחיש: הגבלת חומת האש בשרת הקצה העורפי מצפה ש'כותרת המארח' צריכה תמיד להיות בתוקף מכיל את שם המארח של שרת הקצה העורפי
אפשר להשתמש באחת מהדרכים הבאות כדי לקבוע את כותרת המארח שמועברת על ידי Apigee Edge:
Trace
כדי לקבוע את כותרת המארח באמצעות Trace:
- צריך לוודא שהשדה
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 או כלי דומה של Google. הנה ניתוח לדוגמה של 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 מצפה שכותרת המארח תמיד לכלול שם מארח של שרת עורפי
אם וידאתם שהשגיאה הזו נגרמת מפני שחומת האש בשרת הקצה העורפי מוגדרת כך שהיא מצפה שכותרת המארח תכלול תמיד שרת עורפי שם המארח, בזמן שמעבד ההודעות שולח את שם המארח של שרת ה-proxy, ואז מבצע את השלבים הבאים כדי לפתור את הבעיה:
מגדירים את המאפיין
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