כרגע מוצג התיעוד של 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
- בודקים אם השדות הבאים מופיעים ברשומות ביומן:
שדה Value 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 כדי לנתב תעבורת נתונים לשרת ה-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 למארח: <virtual host name> ו-url: <path>,
ולפתור את השגיאה. אם אף אחד מהגורמים לשגיאה הזו לא גורם לשגיאה הזו, מבצעים את השלבים שלמטה כדי לבדוק אם מארחים וירטואליים עם כינויי מארח כפולים גורמים לשגיאות 404
.
אבחון
אפשר להשתמש באחת מהשיטות הבאות כדי לבדוק אם יש כמה מארחים וירטואליים שיש להם
אותו שם מארח/יציאה אחת, שמובילים לשגיאות 404
:
- ממשק המשתמש של Edge
- ממשקי API לניהול
ממשק המשתמש של Edge
אפשר להיעזר בהוראות הבאות כדי לבדוק אם יש כמה מארחים וירטואליים שיש להם אותו כינוי/יציאה מארח, באמצעות ממשק המשתמש של Edge.
לדוגמה, אם הבחנתם בשגיאה 404
בכתובת ה-URL
http://example.com:9001/proxy1
, עליכם לבדוק לאילו מארחים וירטואליים יש
את כינוי המארח example.com
ואת היציאה 9001
.
- בענן ציבורי ובממשק המשתמש החדש של Edge בענן פרטי:
- בחר במנהל מערכת.
- בוחרים באפשרות מארחים וירטואליים.
- לכל סביבה, משתמשים במסנן החיפוש כדי לקבוע את המארחים הווירטואליים שתואמים לכינוי המארח הספציפי שבאמצעותו הופעלו בקשות ה-API.
- אם מצאתם כמה מארחים וירטואליים שמשתמשים באותו כתובת אימייל חלופית של מארח, עוברים אל פתרון כדי לפתור את הבעיה.
למשל:
- בממשק המשתמש הקלאסי בענן פרטי:
- לוחצים על הכרטיסייה APIs .
- בוחרים באפשרות Environment Configuration (הגדרת סביבה).
- בוחרים באפשרות מארחים וירטואליים.
- עבור כל סביבה, מציגים את רשימת מארחים וירטואליים כדי לראות אם יש התאמה לכינוי המארח הספציפי שבאמצעותו הופעלו בקשות ה-API.
- אם מוצאים כמה מארחים וירטואליים שתואמים לאותו כתובת אימייל חלופית של מארח, עוברים אל פתרון כדי לפתור את הבעיה.
דוגמה:
ממשקי API לניהול
תוכלו להיעזר בהוראות הבאות כדי לבדוק אם יש כמה מארחים וירטואליים שיש להם את אותו כינוי/יציאה של מארח, באמצעות ממשקי ה-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
משתמש בענן פרטי:
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
משתמש בענן פרטי:
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
משתמש בענן פרטי:
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, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- צריך להשלים את הפקודה
curl
כדי לשחזר את השגיאה404
- אם השגיאות
404
לא מתרחשות כרגע, יש לציין את תקופת הזמן עם פרטי אזור הזמן שבהם התרחשו שגיאות מסוג404
בעבר.
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- זוהתה הודעת שגיאה מלאה בבקשות שנכשלו
- הארגון, שם הסביבה ושם ה-Proxy של ה-API שלגביהם מופיעות
שגיאות מסוג
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