404 مضيف افتراضي متعدد باستخدام اسم المضيف المضيف نفسه

أنت تعرض مستندات 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 وحلّها. اتّبِع الخطوات التالية للتحقّق من السجلات:

  1. اعرض سجلات NGINX باستخدام الأمر التالي:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. ابحث عن الحقول التالية في إدخالات السجلّ:
    الحقل القيمة
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    دوِّن معرِّف الرسالة من السجلات.

  3. التحقق من سجلات معالج الرسائل (/opt/apigee/var/log/edge-message-processor/logs/system.log) لمعرفة ما إذا كنت messaging.adaptors.http.flow.ApplicationNotFound لواجهة برمجة التطبيقات المحددة أو إذا كان لديك الترميز معرِّف الرسالة من الخطوة 2 لطلب البيانات من واجهة برمجة التطبيقات.

    نموذج لرسالة خطأ من سجلّ معالج الرسائل

  4. 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.

  1. في السحابة الإلكترونية العامة وواجهة مستخدم Edge الجديدة على السحابة الإلكترونية الخاصة:
    1. حدد المسؤول.
    2. اختَر المضيفات الافتراضية.
    3. في كل بيئة يمكنك استخدام فلتر البحث لتحديد البيئة المضيفون الذين يتطابقون مع اسم المضيف البديل المحدّد الذي يمكن من خلاله استخدام واجهة برمجة التطبيقات استدعاء الطلبات.
    4. إذا وجدت عدة مضيفات افتراضية تستخدم الاسم المستعار للمضيف نفسه، فانتقل إلى يُرجى الحلّ لحلّ هذه المشكلة.

    على سبيل المثال:

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

    على سبيل المثال:

واجهات برمجة تطبيقات الإدارة

استخدم هذه التعليمات لتحديد ما إذا كانت هناك عدة مضيفات افتراضية لها نفس المضيف البديل/المنفذ # باستخدام واجهات برمجة تطبيقات الإدارة.

  1. احصل على تعريف لكل مضيف افتراضي في كل بيئات في المؤسسات لمعرفة المضيفات الظاهرية التي لها نفس اسم المضيف المستعار ورقم المنفذ:

    على سبيل المثال، إذا لاحظت الخطأ 404 في عنوان URL http://example.com:9001/proxy1، عليك إذًا تحديد الخيار الافتراضي. يكون لدى المضيفين الاسم المستعار للمضيف example.com والمنفذ 9001.

    1. الحصول على قائمة البيئات

      مستخدم 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" ]
      
    2. الحصول على قائمة المضيفين الظاهريين في بيئة ما

      مستخدم 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" ]
      
    3. احصل على تعريف لكل مضيف افتراضي في البيئة.

      مستخدم 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" : [ ]
      }
      
    4. كرِّر الخطوتين السابقتين للبيئات الأخرى في مؤسستك.

      في هذا المثال، كرِّر الخطوات لبيئة 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).

    5. إذا وجدت عدة مضيفات افتراضية تطابق الاسم المستعار للمضيف نفسه، فانتقل إلى يُرجى الحلّ لحلّ هذه المشكلة.

الدقة

  1. يُرجى التأكد من أن كل مضيف افتراضي لا يحتوي إلا على أسماء مستعارة فريدة للمضيف مع تركيبات منافذ.
  2. في حالة تحديد مضيفين افتراضيين متعددين يستخدمون نفس اسم المضيف المستعار ومجموعات المنفذ فيجب عليك تحديث هذه باستخدام اسم مستعار فريد للمضيف.
  3. يمكنك تحديثها باستخدام واجهة مستخدم Edge أو Management API، ويمكن العثور على التعليمات أقل من تعديل مضيف افتراضي.
  4. يُرجى التأكد من أنّ كل اسم مستعار للمضيف يتضمّن إدخال نظام أسماء نطاقات صحيحًا.
  5. في المثال الذي تمت مناقشته أعلاه، إذا كانت الإعدادات تبدو على النحو التالي:
    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" : [  ]
    }
    
    1. يمكنك تعديل المضيف الظاهري غير الصحيح كي لا يكون متداخلاً.
    2. هذا هو تعديل الاسم المستعار للمضيف كـ example2.com.
    3. تأكَّد من احتواء الاسم المستعار للمضيف الجديد على إدخال نظام أسماء نطاقات مشابه للاسم المستعار السابق للمضيف.
      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" : [  ]
      }
      
  6. عليك إجراء طلبات البيانات من واجهة برمجة التطبيقات مرة أخرى إلى الخادم الوكيل والتأكّد من تلقّي ردود ناجحة بشكل متّسق:
    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"
        }
    
    }
    
  7. في حال استمرار المشكلة، انتقِل إلى المقالة ضرورة جمع معلومات التشخيص.

يجب جمع معلومات التشخيص

في حال استمرار المشكلة حتى بعد اتّباع التعليمات أعلاه، يُرجى جمع ما يلي معلومات التشخيص، ثم التواصل مع فريق دعم 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