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

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

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

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के जवाब के तौर पर, मैसेज Not Found के साथ 404 का एचटीटीपी स्टेटस कोड और गड़बड़ी का मैसेज 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 के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

404 गड़बड़ी को ठीक करने में, NGINX और मैसेज प्रोसेसर के लॉग मदद करेंगे. लॉग देखने के लिए, यह तरीका अपनाएं:

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

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

404 होस्ट के लिए प्रॉक्सी की पहचान नहीं की जा सकी: <virtualhost name> और यूआरएल: <path> में दिए गए निर्देशों का पालन करें और इस गड़बड़ी को हल करें. अगर किसी भी वजह से यह गड़बड़ी नहीं हो रही है, तो नीचे दिया गया तरीका अपनाकर पता लगाएं कि डुप्लीकेट होस्ट उपनाम वाले वर्चुअल होस्ट की वजह से, 404 गड़बड़ियां तो नहीं हो रही हैं.

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

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

  • Edge यूज़र इंटरफ़ेस (यूआई)
  • मैनेजमेंट एपीआई

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

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

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

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

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

  2. प्राइवेट क्लाउड पर क्लासिक यूज़र इंटरफ़ेस (यूआई) में:
    1. एपीआई टैब को चुनें.
    2. एनवायरमेंट कॉन्फ़िगरेशन चुनें.
    3. वर्चुअल होस्ट चुनें.
    4. हर एनवायरमेंट के लिए, वर्चुअल होस्ट की सूची देखें. इससे यह पता चलेगा कि क्या कोई, उस खास होस्ट का नाम से मेल खाता है जिससे एपीआई अनुरोध शुरू किए गए थे.
    5. अगर आपको एक जैसे होस्ट उपनाम से मेल खाने वाले कई वर्चुअल होस्ट दिखते हैं, तो इस समस्या को हल करने के लिए रिज़ॉल्यूशन पर जाएं.

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

मैनेजमेंट एपीआई

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

  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
      

      प्राइवेट क्लाउड उपयोगकर्ता:

      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
      

      प्राइवेट क्लाउड उपयोगकर्ता:

      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
      

      प्राइवेट क्लाउड उपयोगकर्ता:

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

अगर आप Public Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 404 गड़बड़ी को फिर से दिखाने के लिए, curl कमांड पूरा करें
  • अगर फ़िलहाल 404 गड़बड़ियां नहीं हो रही हैं, तो समय की जानकारी के साथ उस समयावधि की जानकारी दें जब 404 गड़बड़ियां पहले हुई थीं.

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

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