404 एक ही होस्ट उपनाम से एक से ज़्यादा वर्चुअल होस्ट

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

एपीआई कॉल के जवाब के तौर पर, क्लाइंट ऐप्लिकेशन को 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 है या नहीं. यह भी पता चलेगा कि आपके पास एपीआई अनुरोध के लिए, दूसरे चरण में मिला यूनीक मैसेज आईडी है या नहीं.

    मैसेज प्रोसेसर के लॉग में गड़बड़ी के मैसेज का उदाहरण

  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 राउटर और मैसेज प्रोसेसर, होस्ट हेडर, पोर्ट नंबर, और यूआरआई पाथ, दोनों का इस्तेमाल करते हैं. इससे ट्रैफ़िक को सही एपीआई प्रॉक्सी पर रूट किया जा सकता है. एक ही होस्ट एलियास और पोर्ट नंबर वाले कई वर्चुअल होस्ट जैसी अस्पष्ट परिभाषाएं, एंटी-पैटर्न के तौर पर दस्तावेज़ में शामिल हैं. इससे अनचाहे नतीजे मिल सकते हैं. आपको अक्सर 404 गड़बड़ी का मैसेज दिखेगा. इस मैसेज में Unable to identify proxy for host: VIRTUAL_HOST and url: PATH लिखा होगा.

आम तौर पर, अगर एक ही होस्ट एलियास वाले कई वर्चुअल होस्ट मौजूद हैं, तो आपको बीच-बीच में 404 गड़बड़ियां दिखेंगी. ऐसा इसलिए होता है, क्योंकि एपीआई प्रॉक्सी को सिर्फ़ एक वर्चुअल होस्ट पर अनुरोध स्वीकार करने के लिए कॉन्फ़िगर किया जा सकता है. जब एपीआई के अनुरोधों को एपीआई प्रॉक्सी में कॉन्फ़िगर किए गए किसी वर्चुअल होस्ट पर भेजा जाता है, तब आपको जवाब मिल जाता है. हालांकि, जब एपीआई अनुरोधों को उन दूसरे वर्चुअल होस्ट पर रूट किया जाता है जिनके लिए एपीआई प्रॉक्सी को अनुरोध स्वीकार करने के लिए कॉन्फ़िगर नहीं किया गया है, तो एपीआई इन 404 गड़बड़ियों के साथ काम नहीं करेंगे.

404 Unable to identify proxy for host: <virtual host name> and url: <path> में दिए गए निर्देशों का पालन करें और इस गड़बड़ी को ठीक करें. अगर इनमें से किसी भी वजह से यह गड़बड़ी नहीं हो रही है, तो यहां दिया गया तरीका अपनाएं. इससे यह पता चलेगा कि डुप्लीकेट होस्ट एलियास वाले वर्चुअल होस्ट की वजह से, 404 गड़बड़ियां हो रही हैं या नहीं.

संक्रमण की जांच

यह पता लगाने के लिए इनमें से किसी एक तरीके का इस्तेमाल करें कि क्या एक से ज़्यादा वर्चुअल होस्ट में एक ही होस्ट एलियास/पोर्ट # है, जिसकी वजह से 404 से जुड़ी गड़बड़ियां हो रही हैं:

  • Edge यूज़र इंटरफ़ेस (यूआई)
  • Management API

Edge यूज़र इंटरफ़ेस (यूआई)

इन निर्देशों का इस्तेमाल करके यह पता लगाएं कि क्या एक से ज़्यादा वर्चुअल होस्ट में एक ही होस्ट एलियास/पोर्ट # का इस्तेमाल किया जा रहा है. इसके लिए, Edge यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करें.

उदाहरण के लिए, अगर आपको यूआरएल http://example.com:9001/proxy1 के साथ 404 गड़बड़ी दिखती है, तो आपको यह पता लगाना होगा कि किन वर्चुअल होस्ट में होस्ट एलियास example.com और पोर्ट 9001 है.

  1. Public Cloud और Private Cloud पर नए Edge यूज़र इंटरफ़ेस (यूआई) में:
    1. व्यवस्थापक चुनें.
    2. वर्चुअल होस्ट को चुनें.
    3. हर Environment के लिए, खोज फ़िल्टर का इस्तेमाल करके यह पता लगाएं कि कौनसे Virtual Hosts, उस Host Alias से मेल खाते हैं जिसके साथ एपीआई अनुरोधों को शुरू किया गया था.
    4. अगर आपको एक ही होस्ट एलियास का इस्तेमाल करने वाले कई वर्चुअल होस्ट मिलते हैं, तो इस समस्या को हल करने के लिए हल पर जाएं.

    उदाहरण के लिए:

  2. Private Cloud पर Classic UI में:
    1. एपीआई टैब चुनें.
    2. एनवायरमेंट कॉन्फ़िगरेशन को चुनें.
    3. वर्चुअल होस्ट को चुनें.
    4. हर Environment के लिए, Virtual Hosts की सूची देखें. इससे यह पता चलेगा कि क्या कोई Host Alias, एपीआई अनुरोधों को शुरू करने के लिए इस्तेमाल किए गए Host Alias से मेल खाता है.
    5. अगर आपको एक ही होस्ट एलियास से मैच करने वाले कई वर्चुअल होस्ट मिलते हैं, तो इस समस्या को हल करने के लिए समस्या हल करना पर जाएं.

    उदाहरण के लिए:

Management API

इन निर्देशों का इस्तेमाल करके यह पता लगाएं कि क्या मैनेजमेंट एपीआई का इस्तेमाल करके, एक ही होस्ट एलियास/पोर्ट # वाले कई वर्चुअल होस्ट मौजूद हैं.

  1. अपने संगठनों के हर एनवायरमेंट में मौजूद हर वर्चुअल होस्ट की परिभाषा पाएं. इससे यह पता चलेगा कि किन वर्चुअल होस्ट के लिए, होस्ट का उपनाम और पोर्ट नंबर एक जैसा है:

    उदाहरण के लिए, अगर आपको यूआरएल http://example.com:9001/proxy1 के साथ 404 गड़बड़ी दिखती है, तो आपको यह पता लगाना होगा कि किन वर्चुअल होस्ट में होस्ट एलियास example.com और पोर्ट 9001 है.

    1. एनवायरमेंट की सूची पाना

      पब्लिक क्लाउड का उपयोगकर्ता:

      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" ]
    2. किसी एनवायरमेंट में वर्चुअल होस्ट की सूची पाना

      पब्लिक क्लाउड का उपयोगकर्ता:

      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" ]
    3. एनवायरमेंट में मौजूद हर वर्चुअल होस्ट की परिभाषा पाएं.

      पब्लिक क्लाउड का उपयोगकर्ता:

      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" : [ ]
      }
    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" : [ ]
      }

      इस उदाहरण में, दो अलग-अलग एनवायरमेंट test और dev में मौजूद दो वर्चुअल होस्ट default में एक ही होस्ट एलियास 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 की सहायता टीम से संपर्क करें:

अगर आप पब्लिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 404 गड़बड़ी को फिर से बनाने के लिए, curl कमांड पूरी करें
  • अगर फ़िलहाल 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 गड़बड़ियां होने की समयावधि, जिसमें टाइमज़ोन की जानकारी भी शामिल है