أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة HTTP بقيمة 404 مع الرسالة Not
Found ورسالة الخطأ Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH كردّ على طلبات البيانات من واجهة برمجة التطبيقات.
يشير هذا الخطأ إلى أنّه تعذّر على Edge العثور على خادم وكيل واجهة برمجة التطبيقات للمضيف والمسار المحدّدَين.
رسالة الخطأ
يتلقّى تطبيق العميل رمز الاستجابة التالي:
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 و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دوِّن معرّف الرسالة من السجلّات.
- اطّلِع على سجلّات "معالج الرسائل"
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)لمعرفة ما إذا كان لديكmessaging.adaptors.http.flow.ApplicationNotFoundلواجهة برمجة التطبيقات المحدّدة أو ما إذا كان لديك معرّف الرسالة الفريد من الخطوة 2 لطلب بيانات من واجهة برمجة التطبيقات.نموذج لرسالة الخطأ من سجلّ "معالج الرسائل"
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
لتوجيه الزيارات إلى خادم وكيل واجهة برمجة التطبيقات الصحيح. إنّ استخدام تعريفات غامضة، مثل مضيفات افتراضية
متعددة تتضمّن الاسم المستعار للمضيف ورقم المنفذ نفسَيهما، هو نمط غير مستحسن موثّق
و
يمكن أن يؤدي إلى سلوكيات غير متوقّعة. أحد الأخطاء الشائعة التي ستلاحظها هو الخطأ
404 مع الرسالة Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
عادةً، إذا كانت هناك مضيفات افتراضية متعددة تتضمّن الاسم المستعار للمضيف نفسَه، فستلاحظ
أخطاء متقطّعة 404. يرجع ذلك إلى أنّه قد يتم ضبط خادم وكيل واجهة برمجة التطبيقات المحدّد
لقبول الطلبات على أحد المضيفات الافتراضية فقط. عندما يتم توجيه طلبات واجهة برمجة التطبيقات إلى الـ
مضيف الافتراضي المحدّد الذي تم ضبطه في خادم وكيل واجهة برمجة التطبيقات، ستتلقّى استجابة ناجحة.
ومع ذلك، عندما يتم توجيه طلبات واجهة برمجة التطبيقات إلى المضيفات الافتراضية الأخرى التي لم يتم ضبط خادم وكيل واجهة برمجة التطبيقات لقبول الطلبات عليها، ستفشل واجهات برمجة التطبيقات مع ظهور أخطاء 404
هذه.
اتّبِع التعليمات الواردة في
الخطأ 404: تعذّر تحديد خادم وكيل للمضيف: <اسم المضيف الافتراضي> وعنوان URL: <المسار> و
حلّ هذا الخطأ. إذا لم يكن أي من الأسباب يؤدي إلى ظهور هذا الخطأ، استخدِم الخطوات
التالية لتحديد ما إذا كانت المضيفات الافتراضية التي تتضمّن أسماء مستعارة مكرّرة للمضيف هي التي تسبّب أخطاء 404.
التشخيص
استخدِم إحدى الطريقتَين التاليتَين لتحديد ما إذا كانت هناك مضيفات افتراضية متعددة تتضمّن الاسم المستعار للمضيف/رقم المنفذ نفسَيهما ما يؤدي إلى ظهور أخطاء 404:
- واجهة مستخدم Edge
- واجهات برمجة التطبيقات للإدارة
واجهة مستخدم Edge
استخدِم هذه التعليمات لتحديد ما إذا كانت هناك مضيفات افتراضية متعددة تتضمّن الاسم المستعار للمضيف/رقم المنفذ نفسَيهما باستخدام واجهة مستخدم Edge.
على سبيل المثال، إذا ظهر لك الخطأ 404 مع عنوان URL
http://example.com:9001/proxy1، عليك العثور على المضيفات الافتراضية التي تتضمّن
الاسم المستعار للمضيف example.com والمنفذ 9001.
- في Public Cloud وواجهة مستخدم Edge الجديدة على Private Cloud:
- انقر على المشرف.
- انقر على المضيفات الافتراضية.
- بالنسبة إلى كل بيئة ، استخدِم فلتر البحث لتحديد المضيفات الافتراضية التي تطابق الاسم المستعار للمضيف المحدّد الذي تم استدعاء طلبات واجهة برمجة التطبيقات به.
- إذا عثرت على مضيفات افتراضية متعددة تستخدِم الاسم المستعار للمضيف نفسَه، انتقِل إلى قسم الحلّ لحلّ هذه المشكلة.
مثال:

- في واجهة المستخدم الكلاسيكية على Private Cloud:
- انقر على علامة التبويب واجهات برمجة التطبيقات .
- انقر على إعداد البيئة.
- انقر على المضيفات الافتراضية.
- بالنسبة إلى كل بيئة ، اطّلِع على قائمة المضيفات الافتراضية لمعرفة ما إذا كان أي منها يطابق الاسم المستعار للمضيف المحدّد الذي تم استدعاء طلبات واجهة برمجة التطبيقات به.
- إذا عثرت على مضيفات افتراضية متعددة تطابق الاسم المستعار للمضيف نفسَه، انتقِل إلى قسم الحلّ لحلّ هذه المشكلة.
مثال:

واجهات برمجة التطبيقات للإدارة
استخدِم هذه التعليمات لتحديد ما إذا كانت هناك مضيفات افتراضية متعددة تتضمّن الاسم المستعار للمضيف/رقم المنفذ نفسَيهما باستخدام واجهات برمجة التطبيقات للإدارة.
احصل على تعريف كل من المضيفات الافتراضية في كل بيئة من بيئات مؤسستك لمعرفة المضيفات الافتراضية التي تتضمّن الاسم المستعار للمضيف ورقم المنفذ نفسَيهما:
على سبيل المثال، إذا ظهر لك الخطأ
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
مستخدِم 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" ]
الحصول على قائمة المضيفات الافتراضية في بيئة
مستخدِم Public Cloud:
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" ]
الحصول على تعريف كل من المضيفات الافتراضية في البيئة
مستخدِم Public Cloud:
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 أو واجهة برمجة التطبيقات للإدارة. يمكنك الاطّلاع على التعليمات ضِمن تعديل مضيف افتراضي.
- تأكَّد من أنّ كل اسم مستعار للمضيف يتضمّن إدخالًا مناسبًا في نظام أسماء النطاقات.
- في المثال الذي تمت مناقشته أعلاه، إذا كان الإعداد على النحو التالي:
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. - تأكَّد من أنّ الاسم المستعار الجديد للمضيف يتضمّن إدخالًا مشابهًا في نظام أسماء النطاقات للاسم المستعار السابق للمضيف.
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" : [ ] }
- أجرِ طلبات البيانات من واجهة برمجة التطبيقات مرة أخرى إلى الخادم الوكيل وتأكَّد من أنّك تتلقّى استجابات ناجحة باستمرار:
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، قدِّم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم خادم وكيل واجهة برمجة التطبيقات
- أمر
curlالكامل لإعادة إنتاج الخطأ404 - إذا لم تظهر أخطاء
404حاليًا، قدِّم الفترة الزمنية مع معلومات المنطقة الزمنية التي ظهرت فيها أخطاء404في الماضي.
إذا كنت مستخدِم Private Cloud، قدِّم المعلومات التالية:
- رسالة الخطأ الكاملة التي تظهر للطلبات التي تعذّر تنفيذها
- اسم المؤسسة والبيئة واسم خادم وكيل واجهة برمجة التطبيقات التي تظهر لك أخطاء
404فيها - حزمة خادم وكيل واجهة برمجة التطبيقات
- سجلّات الوصول إلى 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