404 একই হোস্ট উপনাম সহ একাধিক ভার্চুয়াল হোস্ট

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

উপসর্গ

ক্লায়েন্ট অ্যাপ্লিকেশনটি 404 এর একটি HTTP স্ট্যাটাস কোড পায় মেসেজটি Not Found এবং ত্রুটি বার্তাটি Unable to identify proxy for host: VIRTUAL_HOST and url: PATH API কলগুলির প্রতিক্রিয়া হিসাবে।

এই ত্রুটির মানে হল যে এজ নির্দিষ্ট ভার্চুয়াল হোস্ট এবং পাথের জন্য API প্রক্সি খুঁজে পায়নি।

ত্রুটি বার্তা

ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত প্রতিক্রিয়া কোড পায়:

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"
      }
   }
}

সম্ভাব্য কারণ

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
ডুপ্লিকেট হোস্ট উপনাম সহ ভার্চুয়াল হোস্ট একাধিক ভার্চুয়াল হোস্টের একই হোস্ট উপনাম এবং পোর্ট নম্বর রয়েছে। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

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) পরীক্ষা করে দেখুন আপনার কাছে নির্দিষ্ট API-এর জন্য messaging.adaptors.http.flow.ApplicationNotFound আছে কিনা বা আপনার কাছে আছে কিনা API অনুরোধের জন্য ধাপ 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 এজ রাউটার এবং মেসেজ প্রসেসর সঠিক API প্রক্সিতে ট্র্যাফিক রুট করতে হোস্ট হেডার, পোর্ট নম্বর এবং URI পাথ উভয়ই ব্যবহার করে। একই হোস্ট উপনাম এবং পোর্ট নম্বর সহ একাধিক ভার্চুয়াল হোস্টের মতো অস্পষ্ট সংজ্ঞা থাকা একটি নথিভুক্ত অ্যান্টি-প্যাটার্ন এবং এটি অপ্রত্যাশিত আচরণের দিকে নিয়ে যেতে পারে। আপনি যে সাধারণ ত্রুটিগুলি লক্ষ্য করবেন তার মধ্যে একটি হল হোস্টের জন্য প্রক্সি সনাক্ত করতে অক্ষম বার্তাটির সাথে একটি 404 ত্রুটি Unable to identify proxy for host: VIRTUAL_HOST and url: PATH

সাধারণত যদি একই হোস্ট উপনাম সহ একাধিক ভার্চুয়াল হোস্ট বিদ্যমান থাকে, তাহলে আপনি মাঝে মাঝে 404 ত্রুটিগুলি পর্যবেক্ষণ করবেন। এর কারণ হল নির্দিষ্ট API প্রক্সি শুধুমাত্র ভার্চুয়াল হোস্টগুলির একটিতে অনুরোধগুলি গ্রহণ করার জন্য কনফিগার করা হতে পারে। যখন API অনুরোধগুলি API প্রক্সিতে কনফিগার করা নির্দিষ্ট ভার্চুয়াল হোস্টে রুট করা হয়, আপনি একটি সফল প্রতিক্রিয়া পাবেন। যাইহোক, যখন API অনুরোধগুলি অন্য ভার্চুয়াল হোস্টগুলিতে পাঠানো হয় যেখানে API প্রক্সি অনুরোধগুলি গ্রহণ করার জন্য কনফিগার করা হয়নি, তখন API গুলি এই 404 ত্রুটিগুলির সাথে ব্যর্থ হবে৷

404-এ প্রদত্ত নির্দেশাবলী অনুসরণ করুন হোস্টের জন্য প্রক্সি সনাক্ত করতে অক্ষম: <virtual host name> এবং url: <path> এবং এই ত্রুটির সমস্যা সমাধান করুন। যদি কোনও কারণই এই ত্রুটির দিকে পরিচালিত না করে, তাহলে ডুপ্লিকেট হোস্ট উপনাম সহ ভার্চুয়াল হোস্টগুলি 404 ত্রুটি ঘটাচ্ছে কিনা তা নির্ধারণ করতে নীচের পদক্ষেপগুলি ব্যবহার করুন৷

রোগ নির্ণয়

একই হোস্ট উপনাম/পোর্ট # 404 ত্রুটির দিকে পরিচালিত একাধিক ভার্চুয়াল হোস্ট আছে কিনা তা নির্ধারণ করতে নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করুন:

  • এজ UI
  • ব্যবস্থাপনা APIs

এজ UI

Edge UI ব্যবহার করে একই হোস্ট উপনাম/পোর্ট # থাকা একাধিক ভার্চুয়াল হোস্ট আছে কিনা তা নির্ধারণ করতে এই নির্দেশাবলী ব্যবহার করুন।

উদাহরণস্বরূপ, আপনি যদি 404 ত্রুটিটি url http://example.com:9001/proxy1 দেখে থাকেন, তাহলে আপনাকে খুঁজে বের করতে হবে কোন ভার্চুয়াল হোস্টে হোস্ট alias example.com এবং পোর্ট 9001 আছে।

  1. পাবলিক ক্লাউডে এবং প্রাইভেট ক্লাউডে নতুন এজ UI :
    1. অ্যাডমিন নির্বাচন করুন।
    2. ভার্চুয়াল হোস্ট নির্বাচন করুন।
    3. প্রতিটি পরিবেশের জন্য ভার্চুয়াল হোস্ট নির্ধারণ করতে অনুসন্ধান ফিল্টার ব্যবহার করুন যা নির্দিষ্ট হোস্ট উপনামের সাথে মেলে যার সাথে API অনুরোধগুলি আহ্বান করা হয়েছিল৷
    4. আপনি যদি একই হোস্ট উপনাম ব্যবহার করে একাধিক ভার্চুয়াল হোস্ট খুঁজে পান তবে এই সমস্যাটি সমাধান করতে রেজোলিউশনে যান।

    যেমন:

  2. ব্যক্তিগত ক্লাউডে ক্লাসিক UI- তে:
    1. APIs ট্যাব নির্বাচন করুন।
    2. এনভায়রনমেন্ট কনফিগারেশন নির্বাচন করুন।
    3. ভার্চুয়াল হোস্ট নির্বাচন করুন।
    4. প্রতিটি পরিবেশের জন্য ভার্চুয়াল হোস্টের তালিকা দেখুন যে নির্দিষ্ট হোস্ট উপনামের সাথে API অনুরোধগুলি আহ্বান করা হয়েছিল তার সাথে মিল আছে কিনা।
    5. আপনি যদি একই হোস্ট আলিয়াসের সাথে মিলে যাওয়া একাধিক ভার্চুয়াল হোস্ট খুঁজে পান তবে এই সমস্যাটি সমাধান করতে রেজোলিউশনে যান।

    উদাহরণ স্বরূপ:

ব্যবস্থাপনা APIs

ম্যানেজমেন্ট এপিআই ব্যবহার করে একই হোস্ট উপনাম/পোর্ট # থাকা একাধিক ভার্চুয়াল হোস্ট আছে কিনা তা নির্ধারণ করতে এই নির্দেশাবলী ব্যবহার করুন।

  1. কোন ভার্চুয়াল হোস্টের একই হোস্ট উপনাম এবং পোর্ট নম্বর রয়েছে তা দেখতে আপনার প্রতিষ্ঠানের প্রতিটি পরিবেশে প্রতিটি ভার্চুয়াল হোস্টের সংজ্ঞা পান:

    উদাহরণস্বরূপ, আপনি যদি 404 ত্রুটিটি url http://example.com:9001/proxy1 দেখে থাকেন, তাহলে আপনাকে খুঁজে বের করতে হবে কোন ভার্চুয়াল হোস্টে হোস্ট alias 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. আপনি এজ ইউআই বা ম্যানেজমেন্ট এপিআই ব্যবহার করে এগুলি আপডেট করতে পারেন, একটি ভার্চুয়াল হোস্ট পরিবর্তন করার অধীনে নির্দেশাবলী পাওয়া যাবে।
  4. নিশ্চিত করুন যে প্রতিটি হোস্ট উপনামের একটি সঠিক DNS এন্ট্রি আছে।
  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. নিশ্চিত করুন যে নতুন হোস্ট উপনামের পূর্ববর্তী হোস্ট উপনামের মতো একই DNS এন্ট্রি রয়েছে।
      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. প্রক্সিতে আবার API কল করুন এবং যাচাই করুন যে আপনি ধারাবাহিকভাবে সফল প্রতিক্রিয়া পাচ্ছেন:
    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 সাপোর্টের সাথে যোগাযোগ করুন:

আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:

  • প্রতিষ্ঠানের নাম
  • পরিবেশের নাম
  • API প্রক্সি নাম
  • 404 ত্রুটি পুনরুত্পাদন করতে curl কমান্ডটি সম্পূর্ণ করুন
  • যদি 404 ত্রুটি বর্তমানে ঘটছে না, অতীতে যখন 404 ত্রুটি ঘটেছে টাইমজোন তথ্য সহ সময়কাল প্রদান করুন।

আপনি যদি একজন ব্যক্তিগত ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:

  • ব্যর্থ অনুরোধের জন্য পরিলক্ষিত সম্পূর্ণ ত্রুটি বার্তা
  • প্রতিষ্ঠান, পরিবেশের নাম এবং API প্রক্সি নাম যার জন্য আপনি 404 ত্রুটি পর্যবেক্ষণ করছেন
  • API প্রক্সি বান্ডেল
  • 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 ত্রুটি ঘটেছে