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

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

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

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, Not Found मैसेज और गड़बड़ी के मैसेज Unable to identify proxy for host: VIRTUAL_HOST and url: PATH के साथ 404 का एचटीटीपी स्टेटस कोड मिलता है.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      सार्वजनिक क्लाउड उपयोगकर्ता:

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

      सार्वजनिक क्लाउड उपयोगकर्ता:

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

      सार्वजनिक क्लाउड उपयोगकर्ता:

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

अगर आप निजी 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 गड़बड़ी होने के समय, टाइमज़ोन की जानकारी वाली समयावधि