מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 404
עם ההודעה Not
Found
והודעת השגיאה Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
בתגובה לקריאות ל-API.
משמעות השגיאה הזו היא ש-Edge לא הצליח למצוא את שרת ה-proxy של ה-API עבור המארח והנתיב הווירטואלי שצוינו.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 404 Not Found
בנוסף, יכול להיות שתופיע הודעת שגיאה דומה להודעה שמוצגת בהמשך:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
גורמים אפשריים
סיבה | תיאור | הוראות לפתרון בעיות עבור |
---|---|---|
מארח וירטואלי עם כתובת אימייל חלופית של מארח כפול | למספר מארחים וירטואליים יש אותו כינוי ואותו מספר יציאה. | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
היומנים של NGINX ושל מעבד ההודעות יעזרו בפתרון השגיאה 404
.
כך בודקים את היומנים:
- כדי לצפות ביומני NGINX, משתמשים בפקודה הבאה:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- בודקים את השדות הבאים ברשומות ביומן:
שדה ערך Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
מציינים את מזהה ההודעה ביומנים.
- בדיקת היומנים של מעבד ההודעות
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
כדי לבדוק אם יש אתmessaging.adaptors.http.flow.ApplicationNotFound
ל-API הספציפי או אם יש לכם מזהה ההודעה משלב 2 של בקשת ה-API.הודעת שגיאה לדוגמה מהיומן של מעבד ההודעות
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
היומן שלמעלה מציג את קוד השגיאה ואת הודעת השגיאה כך:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
הסיבה: כמה מארחים וירטואליים עם אותו שם מארח ואותו מספר יציאה
נתבי Apigee Edge ומעבדי הודעות משתמשים גם בכותרת המארח, במספר היציאה ובנתיבי ה-URI
כדי לנתב תנועה לשרת ה-proxy הנכון של ה-API. אם יש הגדרות לא חד-משמעיות, כמו כמה הגדרות וירטואליות
כשמארחים אותה כתובת אימייל חלופית ואותו מספר יציאה יש תיעוד של
אנטי-דפוס
עלולות להוביל להתנהגות בלתי צפויה. אחת מהשגיאות הנפוצות ביותר שתראו היא
שגיאה 404
עם ההודעה Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
בדרך כלל אם קיימים כמה מארחים וירטואליים עם אותו כינוי מארח, תראו
404
שגיאות מופיעות לסירוגין. הסיבה לכך היא שיכול להיות ששרת ה-Proxy ל-API מוגדר
לאשר את הבקשות רק באחד מהמארחים הווירטואליים. כשבקשות ה-API מנותבות אל
למארח וירטואלי ספציפי שמוגדר ב-API Proxy, תקבל תגובה מוצלחת.
עם זאת, כשבקשות ה-API ינותבו למארחים הווירטואליים האחרים שאליהם שרת ה-proxy של ה-API
לא מוגדר לקבל את הבקשות, ממשקי ה-API ייכשלו ויתקבלו 404
שגיאות.
פועלים לפי ההוראות שמופיעות ב
404 לא ניתן לזהות את שרת ה-proxy של המארח: <שם מארח וירטואלי> וכתובת URL: <path> וגם
לפתור את השגיאה. אם אף אחד מהגורמים לשגיאה הזו לא גורם לשגיאה, פועלים לפי השלבים.
למטה כדי לקבוע אם מארחים וירטואליים עם כינויי מארח כפולים גורמים ל-404
שגיאות.
אבחון
תוכלו להשתמש באחת מהשיטות הבאות כדי לבדוק אם יש כמה מארחים וירטואליים עם
אותו כינוי/יציאה # של המארח, שמובילים לשגיאות 404
:
- ממשק המשתמש של Edge
- ממשקי API לניהול
ממשק המשתמש של Edge
ההוראות הבאות מאפשרות לך לקבוע אם יש כמה מארחים וירטואליים עם אותו מארח כתובת אימייל חלופית/יציאה # באמצעות ממשק המשתמש של Edge.
לדוגמה, אם הבחנתם בשגיאה 404
בכתובת ה-URL
http://example.com:9001/proxy1
, צריך לבדוק אילו מארחים וירטואליים יש
כתובת האימייל החלופית של המארח example.com
והיציאה 9001
.
- ב-Public Cloud ובממשק המשתמש החדש של Edge בענן פרטי:
- בחר במנהל מערכת.
- בוחרים באפשרות מארחים וירטואליים.
- עבור כל סביבה משתמשים במסנן החיפוש כדי לקבוע את הערך מארחים שתואמים לכינוי המארח הספציפי שאיתו ה-API נשלחו בקשות.
- אם מוצאים כמה מארחים וירטואליים שמשתמשים באותו כינוי מארח, עוברים אל פתרון כדי לפתור את הבעיה.
למשל:
- בממשק המשתמש הקלאסי בענן פרטי:
- עוברים לכרטיסייה APIs .
- בוחרים את Environment Configuration (הגדרת הסביבה).
- בוחרים באפשרות מארחים וירטואליים.
- עבור כל סביבה, הצג את רשימת מארחים וירטואליים כדי לראות אם יש התאמה כינוי המארח הספציפי שבאמצעותו הופעלו בקשות ה-API.
- אם מוצאים כמה מארחים וירטואליים שתואמים לאותו כינוי מארח, עוברים אל פתרון כדי לפתור את הבעיה.
לדוגמה:
ממשקי API לניהול
ההוראות הבאות מאפשרות לך לקבוע אם יש כמה מארחים וירטואליים עם אותו מארח כינוי/יציאה # באמצעות ממשקי ה-API של ניהול.
קבלת ההגדרה של כל אחד מהמארחים הווירטואליים בכל אחת מהסביבות כדי לראות לאילו מארחים וירטואליים יש כינוי ואותו מספר יציאה של המארח:
לדוגמה, אם הבחנתם בשגיאה
404
בכתובת ה-URLhttp://example.com:9001/proxy1
, צריך למצוא את למארחים יש את כינוי המארחexample.com
ואת היציאה9001
.הצגה של רשימת הסביבות
משתמש ב-Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
משתמש בענן פרטי:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
כאשר:
ORGANIZATION_NAME הוא שם הארגון
דוגמה:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
הצגת רשימה של מארחים וירטואליים בסביבה
משתמש ב-Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
משתמש בענן פרטי:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
כאשר:
ORGANIZATION_NAME הוא שם הארגון
ENVIRONMENT_NAME הוא שם הסביבה
דוגמה:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
הצגת ההגדרה של כל אחד מהמארחים הווירטואליים בסביבה.
משתמש ב-Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
משתמש בענן פרטי:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
כאשר:
ORGANIZATION_NAME הוא שם הארגון
ENVIRONMENT_NAME הוא שם הסביבה
VIRTUAL_HOST_NAME הוא השם של המארח הווירטואלי
דוגמה:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
חוזרים על שני השלבים שלמעלה לגבי הסביבות האחרות בארגון.
בדוגמה הזו, חוזרים על השלבים בשביל
dev
:curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
[ "default" ]
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
בדוגמה הזו אפשר לראות ששני המארחים הווירטואליים
default
בשתי סביבות שונות,test
ו-dev
, שתיהן מכילים את אותו כינוי מארחexample.com
ואותו מספר יציאה9001
זו הסיבה לשגיאות404
.- אם מוצאים כמה מארחים וירטואליים שתואמים לאותו כינוי מארח, עוברים אל פתרון כדי לפתור את הבעיה.
רזולוציה
- מוודאים שכל מארח וירטואלי מכיל רק שילובים ייחודיים של כינוי מארח ויציאות.
- אם זיהית כמה מארחים וירטואליים עם אותו כינוי מארח ושילובים של יציאות צריך לעדכן אותם באמצעות כינוי ייחודי של המארח.
- אפשר לעדכן את ההגדרות האלה דרך ממשק המשתמש של Edge או ה-Management API. אפשר למצוא הוראות פחות מ- שינוי מארח וירטואלי.
- מוודאים שלכל כינוי של מארח יש רשומת DNS מתאימה.
- בדוגמה שלמעלה, אם ההגדרות שלנו נראו כך:
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- ניתן לעדכן את המארח הווירטואלי השגוי כך שהוא לא חופף.
- העדכון הוא כתובת האימייל החלופית של המארח
example2.com
. - מוודאים שלכתובת האימייל החלופית של המארח יש רשומת DNS דומה לזו של הכינוי הקודם של המארח.
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{ "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }' -i
HTTP/1.1 200 OK Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Type: application/json X-Apigee.user: user X-Apigee.organization: myorg X-Apigee.environment: dev X-Apigee.backends: management-server Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Length: 152 { "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- מבצעים שוב את הקריאות ל-API לשרת ה-proxy ומוודאים שאתם מקבלים תגובות מוצלחות באופן עקבי:
curl http://example.com:9001/proxy1
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type:": "all" }, { "items": [ "Why WonderWidgets are great", "Who buys WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
- אם הבעיה עדיין נמשכת, עוברים למאמר נדרש איסוף של פרטי אבחון.
חובה לאסוף פרטי אבחון
אם הבעיה נמשכת גם לאחר ביצוע ההוראות שלמעלה, יש לאסוף את הפריטים הבאים את פרטי האבחון ולאחר מכן פונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curl
כדי לשחזר את השגיאה404
- אם השגיאות מסוג
404
לא מתרחשות כרגע, יש לציין את תקופת הזמן עם פרטי אזור הזמן כשאירעו404
שגיאות בעבר.
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- הארגון, שם הסביבה ושם ה-Proxy של ה-API שעבורם מוצגים
404
שגיאות - חבילת API Proxy
- יומני גישה ל-NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- יומנים של מעבד ההודעות
/opt/apigee/var/log/edge-message-processor/logs/system.log
- התקופה עם פרטי אזור הזמן שבה התרחשו
404
השגיאות