אתם צופים במסמכי התיעוד של 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 Public Cloud וב-Edge Private Cloud |
שלבים נפוצים לאבחון
יומני NGINX ו-מעבד בקשות יעזרו לפתור את השגיאה 404.
כדי לבדוק את היומנים:
- כדי להציג את היומנים של NGINX, מריצים את הפקודה הבאה:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- בודקים אם השדות הבאים מופיעים ברשומות ביומן:
שדה ערך Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundרושמים את מזהה ההודעה מתוך היומנים.
- בודקים את היומנים של Message Processor (
/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 לסירוגין. הסיבה לכך היא שאולי הוגדר שפרוקסי ה-API הספציפי יקבל את הבקשות רק באחד מהמארחים הווירטואליים. כשבקשות ה-API מנותבות למארח הווירטואלי הספציפי שהוגדר ב-API Proxy, מתקבלת תגובה שהבקשה בוצעה בהצלחה.
עם זאת, אם בקשות ה-API מנותבות למארחים וירטואליים אחרים שבהם לא הוגדר API Proxy לקבלת הבקשות, ה-API ייכשל עם השגיאות האלה: 404
פועלים לפי ההוראות שמופיעות בקטע
404 Unable to identify proxy for host: <virtual host name> and url: <path> ופותרים את הבעיה. אם אף אחת מהסיבות האלה לא גורמת לשגיאה, צריך לפעול לפי השלבים שבהמשך כדי לבדוק אם מארחים וירטואליים עם כינויי מארח כפולים גורמים לשגיאות 404.
אבחון
כדי לבדוק אם יש כמה מארחים וירטואליים עם אותו שם מארח/מספר יציאה שמובילים לשגיאות 404, אפשר להשתמש באחת מהשיטות הבאות:
- ממשק משתמש של Edge
- Management APIs
ממשק משתמש של Edge
אפשר להשתמש בהוראות האלה כדי לקבוע אם יש כמה מארחים וירטואליים עם אותו כינוי מארח או מספר יציאה באמצעות ממשק המשתמש של Edge.
לדוגמה, אם נתקלתם בשגיאה 404 עם כתובת ה-URL http://example.com:9001/proxy1, אתם צריכים לגלות אילו מארחים וירטואליים כוללים את כינוי המארח example.com ואת היציאה 9001.
- ב-Public Cloud וב-new Edge UI on Private Cloud:
- בחר במנהל מערכת.
- בוחרים באפשרות Virtual Hosts (מארחים וירטואליים).
- לכל Environment, משתמשים במסנן החיפוש כדי לקבוע את Virtual Hosts שתואמים ל-Host Alias הספציפי שבאמצעותו הופעלו בקשות ה-API.
- אם מצאתם כמה מארחים וירטואליים שמשתמשים באותו כינוי מארח, כדאי לעבור אל פתרון כדי לפתור את הבעיה.
למשל:

- בממשק המשתמש הקלאסי בענן פרטי:
- בוחרים בכרטיסייה ממשקי API .
- בוחרים באפשרות Environment Configuration (הגדרת הסביבה).
- בוחרים באפשרות Virtual Hosts (מארחים וירטואליים).
- בכל סביבה, בודקים את רשימת המארחים הווירטואליים כדי לראות אם יש התאמה לכינוי המארח הספציפי שבאמצעותו הופעלו בקשות ה-API.
- אם מצאתם כמה מארחים וירטואליים שתואמים לאותו כינוי מארח, כדאי לעבור אל פתרון כדי לפתור את הבעיה.
לדוגמה:

Management APIs
אפשר להשתמש בהוראות האלה כדי לבדוק אם יש כמה מארחים וירטואליים עם אותו כינוי מארח או מספר יציאה באמצעות ממשקי הניהול של API.
כדי לראות אילו מארחים וירטואליים כוללים את אותו כינוי מארח ומספר יציאה, צריך לקבל את ההגדרה של כל אחד מהמארחים הווירטואליים בכל אחת מהסביבות בארגונים שלכם:
לדוגמה, אם נתקלתם בשגיאה
404בכתובת ה-URLhttp://example.com:9001/proxy1, צריך למצוא את המארחים הווירטואליים עם שם המארחexample.comוהיציאה9001.קבלת רשימת הסביבות
משתמש בענן ציבורי:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
משתמש ב-Private Cloud:
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" ]
קבלת רשימת המארחים הווירטואליים בסביבה
משתמש בענן ציבורי:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
משתמש ב-Private Cloud:
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" ]
מקבלים את ההגדרה של כל אחד מהמארחים הווירטואליים בסביבה.
משתמש בענן ציבורי:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
משתמש ב-Private Cloud:
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" : [ ] }' -iHTTP/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:
אם אתם משתמשי ענן ציבורי, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-proxy ל-API
- השלמת הפקודה
curlלשחזור השגיאה404 - אם השגיאות
404לא מתרחשות כרגע, צריך לציין את טווח הזמן עם פרטי אזור הזמן שבו השגיאות404התרחשו בעבר.
אם אתם משתמשים ב-Private Cloud, עליכם לספק את הפרטים הבאים:
- הודעת השגיאה המלאה שזוהתה בבקשות שנכשלו
- שם הארגון, שם הסביבה ושם ה-API Proxy שבהם נצפו שגיאות
404 - חבילת proxy ל-API
- יומני גישה של 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