أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على رمز حالة 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 و Private Cloud |
خطوات التشخيص الشائعة
يمكنك الاستفادة من سجلّات 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
لواجهة برمجة التطبيقات المحددة أو إذا كان لديك الترميز معرِّف الرسالة من الخطوة 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).
لتوجيه حركة البيانات إلى الخادم الوكيل الصحيح لواجهة برمجة التطبيقات. إن وجود تعريفات غامضة مثل عدة أشكال
المضيفين الذين لديهم نفس الاسم المستعار للمضيف ورقم المنفذ موثقة
anti-pattern
إلى سلوكيات غير متوقعة. أحد الأخطاء الشائعة التي ستلاحظها هو
حدث خطأ 404
في الرسالة Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
عادةً إذا كان هناك عدة مضيفين افتراضيين لهم نفس الاسم المستعار للمضيف، ستلاحظ
أخطاء 404
متقطّعة. وذلك لأنه ربما تم ضبط الخادم الوكيل المحدد لواجهة برمجة التطبيقات
لقبول الطلبات على مضيف واحد فقط من المضيفين الافتراضيين. عند توجيه طلبات البيانات من واجهة برمجة التطبيقات إلى
مضيف افتراضي محدد تم إعداده في الخادم الوكيل لواجهة برمجة التطبيقات، ستحصل على استجابة ناجحة.
ولكن عند توجيه طلبات البيانات من واجهة برمجة التطبيقات إلى المضيفات الافتراضية الأخرى التي يتم تعيين الخادم الوكيل لواجهة برمجة التطبيقات إليها
لم يتم إعدادها لقبول الطلبات، فستفشل واجهات برمجة التطبيقات مع 404
هذه
الأخطاء.
اتبع التعليمات الواردة في
404 تعذر تحديد الخادم الوكيل للمضيف: <اسم المضيف الافتراضي> وعنوان URL : <path> و
ونحدد هذا الخطأ وإصلاحها. إذا لم يؤدِ أي من الأسباب إلى حدوث هذا الخطأ، فاستخدم الخطوات
أدناه لتحديد ما إذا كانت المضيفات الافتراضية ذات الأسماء المستعارة للمضيفين المكررة هي التي تتسبب في حدوث 404
الأخطاء.
التشخيص
استخدم إحدى الطرق التالية لتحديد ما إذا كان هناك عدة مضيفين افتراضيين لديهم
نفس اسم المضيف/المنفذ # الذي يؤدي إلى 404
أخطاء:
- واجهة مستخدم Edge
- واجهات برمجة تطبيقات الإدارة
واجهة مستخدم Edge
استخدم هذه التعليمات لتحديد ما إذا كانت هناك عدة مضيفات افتراضية لها نفس المضيف الاسم المستعار/المنفذ # باستخدام واجهة مستخدم Edge.
على سبيل المثال، إذا لاحظت الخطأ 404
في عنوان URL
http://example.com:9001/proxy1
، ثم عليك البحث عن أي مضيفين افتراضيين لديهم
الاسم المستعار للمضيف example.com
والمنفذ 9001
.
- في السحابة الإلكترونية العامة وواجهة مستخدم Edge الجديدة على السحابة الإلكترونية الخاصة:
- حدد المسؤول.
- اختَر المضيفات الافتراضية.
- في كل بيئة يمكنك استخدام فلتر البحث لتحديد البيئة المضيفون الذين يتطابقون مع اسم المضيف البديل المحدّد الذي يمكن من خلاله استخدام واجهة برمجة التطبيقات استدعاء الطلبات.
- إذا وجدت عدة مضيفات افتراضية تستخدم الاسم المستعار للمضيف نفسه، فانتقل إلى يُرجى الحلّ لحلّ هذه المشكلة.
على سبيل المثال:
- في واجهة المستخدم الكلاسيكية على Private Cloud:
- اختَر علامة التبويب واجهات برمجة التطبيقات .
- اختَر ضبط البيئة.
- اختَر المضيفات الافتراضية.
- بالنسبة إلى كل بيئة، يمكنك عرض قائمة المضيفات الافتراضية لمعرفة ما إذا كان هناك أي تطابق اسم المضيف البديل المحدّد الذي تم استدعاء طلبات واجهة برمجة التطبيقات من خلاله.
- إذا وجدت عدة مضيفات افتراضية تطابق الاسم المستعار للمضيف نفسه، فانتقل إلى يُرجى الحلّ لحلّ هذه المشكلة.
على سبيل المثال:
واجهات برمجة تطبيقات الإدارة
استخدم هذه التعليمات لتحديد ما إذا كانت هناك عدة مضيفات افتراضية لها نفس المضيف البديل/المنفذ # باستخدام واجهات برمجة تطبيقات الإدارة.
احصل على تعريف لكل مضيف افتراضي في كل بيئات في المؤسسات لمعرفة المضيفات الظاهرية التي لها نفس اسم المضيف المستعار ورقم المنفذ:
على سبيل المثال، إذا لاحظت الخطأ
404
في عنوان URLhttp://example.com:9001/proxy1
، عليك إذًا تحديد الخيار الافتراضي. يكون لدى المضيفين الاسم المستعار للمضيفexample.com
والمنفذ9001
.الحصول على قائمة البيئات
مستخدم Cloud العام:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
مستخدم 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" ]
الحصول على قائمة المضيفين الظاهريين في بيئة ما
مستخدم Cloud العام:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
مستخدم 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" ]
احصل على تعريف لكل مضيف افتراضي في البيئة.
مستخدم Cloud العام:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
مستخدم 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، ويمكن العثور على التعليمات أقل من تعديل مضيف افتراضي.
- يُرجى التأكد من أنّ كل اسم مستعار للمضيف يتضمّن إدخال نظام أسماء نطاقات صحيحًا.
- في المثال الذي تمت مناقشته أعلاه، إذا كانت الإعدادات تبدو على النحو التالي:
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" : [ ] }' -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" : [ ] }
- عليك إجراء طلبات البيانات من واجهة برمجة التطبيقات مرة أخرى إلى الخادم الوكيل والتأكّد من تلقّي ردود ناجحة بشكل متّسق:
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:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
لإعادة إظهار الخطأ404
- إذا لم تظهر أخطاء
404
حاليًا، أدخِل الفترة الزمنية. مع معلومات المنطقة الزمنية عند حدوث404
خطأ في الماضي.
إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم المؤسسة والبيئة واسم الخادم الوكيل لواجهة برمجة التطبيقات التي تراقبها
خطآن (
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