404 হোস্টের জন্য প্রক্সি সনাক্ত করতে অক্ষম: <ভার্চুয়াল হোস্ট নাম> এবং url: <path>

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

লক্ষণ

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

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

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

আপনি নিম্নলিখিত HTTP স্ট্যাটাস কোডটি পাবেন:

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 default ভার্চুয়াল হোস্ট এবং /oauth2/token পাথের জন্য API প্রক্সি খুঁজে পায়নি।

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

এই ত্রুটির কয়েকটি সম্ভাব্য কারণ নিচে দেওয়া হলো:

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
এপিআই প্রক্সি নির্দিষ্ট ভার্চুয়াল হোস্টের সাথে যুক্ত নয় ত্রুটি বার্তায় উল্লেখিত ভার্চুয়াল হোস্টে অনুরোধ গ্রহণ করার জন্য নির্দিষ্ট এপিআই প্রক্সিটি কনফিগার করা নেই। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা
এপিআই প্রক্সির নতুন সংস্করণে ভার্চুয়াল হোস্ট সরিয়ে ফেলা হয়েছে। ক্লায়েন্ট যখন নির্দিষ্ট ভার্চুয়াল হোস্টটি ব্যবহার করছে, সেই অবস্থায় নতুনভাবে ডেপ্লয় করা রিভিশন থেকে ভার্চুয়াল হোস্টটি সরিয়ে ফেললে এই সমস্যাটি হতে পারে। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা
পথটি কোনো এপিআই প্রক্সির সাথে যুক্ত নয় ত্রুটি বার্তায় উল্লেখিত পাথে অনুরোধ গ্রহণ করার জন্য নির্দিষ্ট এপিআই প্রক্সিটি কনফিগার করা নেই। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা
পরিবেশে এপিআই প্রক্সি স্থাপন করা হয়নি আপনি যে নির্দিষ্ট পরিবেশে এপিআই অনুরোধগুলি করার চেষ্টা করছেন, সেখানে নির্দিষ্ট এপিআই প্রক্সিটি স্থাপন করা নেই। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা
মেসেজ প্রসেসরে এনভায়রনমেন্ট লোড করা হয়নি একটি ত্রুটির কারণে, নির্দিষ্ট পরিবেশটি (যেটিতে আপনি এপিআই অনুরোধগুলো করার চেষ্টা করছেন) মেসেজ প্রসেসরগুলোতে লোড করা হয়নি। এজ প্রাইভেট ক্লাউড ব্যবহারকারীরা
এক বা একাধিক মেসেজ প্রসেসরে এপিআই প্রক্সি স্থাপন করা হয়নি ডেপ্লয়মেন্টের সময় ইভেন্ট নোটিফিকেশন না পাওয়ার কারণে এক বা একাধিক মেসেজ প্রসেসরে এপিআই প্রক্সি ডেপ্লয় করা নাও হতে পারে। এজ প্রাইভেট ক্লাউড ব্যবহারকারীরা

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

404 এরর ট্রাবলশুটিং-এর জন্য NGINX এবং Message Processor লগগুলো সহায়ক হবে। লগগুলো চেক করতে নিচের ধাপগুলো অনুসরণ করুন:

  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. নির্দিষ্ট API-টির জন্য আপনার messaging.adaptors.http.flow.ApplicationNotFound আছে কিনা, অথবা API অনুরোধটির জন্য আপনার কাছে ধাপ ২ থেকে পাওয়া অনন্য মেসেজ আইডিটি আছে কিনা, তা দেখতে মেসেজ প্রসেসর লগ ( /opt/apigee/var/log/edge-message-processor/logs/system.log) পরীক্ষা করুন।

    মেসেজ প্রসেসর লগ থেকে প্রাপ্ত ত্রুটি বার্তার নমুনা

  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

কারণ: এপিআই প্রক্সি নির্দিষ্ট ভার্চুয়াল হোস্টের সাথে সংযুক্ত নয়

যদি এপিআই প্রক্সি নির্দিষ্ট ভার্চুয়াল হোস্টের জন্য অনুরোধ গ্রহণ করার জন্য কনফিগার করা না থাকে, তাহলে আমরা Unable to identify proxy for host: VIRTUAL_HOST and url: PATH . এই ত্রুটি বার্তাসহ একটি 404 Not Found প্রতিক্রিয়া পেতে পারি।

রোগ নির্ণয়

  1. এপিআই প্রক্সির জন্য প্রক্সি এন্ডপয়েন্ট কনফিগারেশনটি পরীক্ষা করুন এবং দেখুন যে, ত্রুটিতে উল্লেখিত ভার্চুয়াল হোস্টের জন্য অনুরোধগুলি গ্রহণ করার জন্য এপিআই প্রক্সিটি কনফিগার করা আছে কি না। এটি VirtualHost এলিমেন্ট দ্বারা নির্দেশিত হয়। বিষয়টি বোঝার জন্য চলুন একটি নমুনা ProxyEndpoint কনফিগারেশন দেখি।

    নমুনা প্রক্সি এন্ডপয়েন্ট কনফিগারেশন যা দেখাচ্ছে যে এপিআই প্রক্সি একটি সুরক্ষিত ভার্চুয়াল হোস্টে অনুরোধ গ্রহণ করে।

  2. ধরা যাক, নির্দিষ্ট পরিবেশে ভার্চুয়াল হোস্টগুলো নিম্নরূপভাবে সংজ্ঞায়িত করা হয়েছে:
    নাম বন্দর হোস্টের ছদ্মনাম
    default 80 myorg-prod.apigee.net
    secure 443 myorg-prod.apigee.net
  3. আপনি http://myorg-prod.apigee.net/weather ইউআরএলটি ব্যবহার করে default VirtualHost একটি এপিআই অনুরোধ পাঠান।
  4. যেহেতু উপরের উদাহরণে দেখানো অনুযায়ী ProxyEndpoint default VirtualHost নেই, তাই আপনি নিম্নলিখিত ত্রুটি বার্তা সহ 404 প্রতিক্রিয়া কোডটি পাবেন:
    {"fault":{"faultstring":"Unable to identify proxy for host: default and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
  5. এই সমস্যাটির সমাধান করতে নিচের সমাধান বিভাগে যান।
  6. যদি ProxyEndpoint টি default VirtualHost এ অনুরোধ গ্রহণ করার জন্য কনফিগার করা থাকে, তাহলে পরবর্তী কারণটি দেখুন – Path not associated with any API proxy

সমাধান

  1. সমস্যাটির সমাধান করতে ProxyEndpoint কনফিগারেশনে অনুপস্থিত VirtualHost যোগ করুন। উপরে দেখানো উদাহরণটির জন্য, আপনি নিম্নলিখিতভাবে ProxyEndpoint কনফিগারেশনে ডিফল্ট VirtualHost যোগ করতে পারেন:
    <VirtualHost>default</VirtualHost>

    নমুনা প্রক্সি এন্ডপয়েন্ট কনফিগারেশন যেখানে ডিফল্ট > ভার্চুয়ালহোস্ট > যোগ করা হচ্ছে

  2. বিকল্পভাবে, উপরে উল্লিখিত উদাহরণে, যদি আপনি এই নির্দিষ্ট এপিআই প্রক্সির জন্য শুধুমাত্র secure VirtualHost ব্যবহার করতে চান, তাহলে HTTPS প্রোটোকল ব্যবহার করে শুধুমাত্র secure VirtualHost এপিআই অনুরোধগুলি পাঠান:
    https://myorg-prod.apigee.net/weather

কারণ: এপিআই প্রক্সির নতুনভাবে ডেপ্লয় করা সংস্করণে ভার্চুয়াল হোস্টটি সরিয়ে ফেলা হয়েছে।

যদি পূর্ববর্তী সংস্করণের একটি নির্দিষ্ট ভার্চুয়াল হোস্ট সরিয়ে ফেলার পর এপিআই প্রক্সির কোনো নতুন সংস্করণ স্থাপন করা হয়, এবং ক্লায়েন্টরা তখনও এপিআই অনুরোধ করার জন্য সেটি ব্যবহার করে থাকে, তাহলে এই সমস্যাটি দেখা দিতে পারে।

রোগ নির্ণয়

  1. এপিআই প্রক্সির প্রক্সি এন্ডপয়েন্ট কনফিগারেশন পরীক্ষা করে দেখুন যে, ত্রুটিতে উল্লেখিত ভার্চুয়াল হোস্টের জন্য অনুরোধগুলি গ্রহণ করার জন্য এপিআই প্রক্সিটি কনফিগার করা আছে কিনা। ProxyEndpoint কনফিগারেশনের VirtualHost এলিমেন্ট দ্বারা এটি নির্দেশিত হয়।
  2. যদি ত্রুটিতে উল্লেখিত ভার্চুয়াল হোস্টটি ProxyEndpoint কনফিগারেশনে না থাকে, তাহলে নিম্নলিখিত ধাপগুলি অনুসরণ করুন। অন্যথায়, পরবর্তী কারণটিতে যান - Path not associated with any API proxy (পাথটি কোনো API প্রক্সির সাথে যুক্ত নয় )।
  3. পূর্বে ডেপ্লয় করা রিভিশনের সাথে বর্তমানে ডেপ্লয় করা রিভিশনের ProxyEndpoint কনফিগারেশন তুলনা করুন।
    1. উদাহরণস্বরূপ, ধরা যাক আপনার পূর্বে ডেপ্লয় করা রিভিশনটি ছিল 5 এবং বর্তমানে ডেপ্লয় করা রিভিশনটি হলো 6 :
      • রিভিশন ৫-এ প্রক্সি এন্ডপয়েন্টে কনফিগার করা ভার্চুয়াল হোস্ট
      • <HTTPProxyConnection>
            <BasePath>/weather</BasePath>
            <Properties/>
            <VirtualHost>vh1</VirtualHost>
        </HTTPProxyConnection>
      • রিভিশন ৬-এ প্রক্সি এন্ডপয়েন্টে কনফিগার করা ভার্চুয়াল হোস্ট
      • <HTTPProxyConnection>
            <BasePath>/weather</BasePath>
            <Properties/>
            <VirtualHost>secure</VirtualHost>
        </HTTPProxyConnection>
    2. উপরের উদাহরণে, VirtualHost vh1 revision 5, কিন্তু revision 6 এ এটিকে সরিয়ে VirtualHost secure দ্বারা প্রতিস্থাপন করা হয়েছে।
    3. সুতরাং, যদি আপনি বা আপনার ক্লায়েন্টরা VirtualHost vh1 (যা revision 5 এর অংশ ছিল) ব্যবহার করে এই API প্রক্সিতে অনুরোধ পাঠান, তাহলে আপনি নিম্নলিখিত ত্রুটি বার্তা সহ 404 প্রতিক্রিয়া কোডটি পাবেন:
      {"fault":{"faultstring":"Unable to identify proxy for host: vh1 and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
  4. বর্তমানে ডেপ্লয় করা রিভিশনটিতে ভার্চুয়াল হোস্ট পরিবর্তনটি ইচ্ছাকৃতভাবে করা হয়েছে নাকি অনিচ্ছাকৃতভাবে, তা যাচাই করুন এবং সমাধান (Resolution) বিভাগে ব্যাখ্যা করা অনুযায়ী যথাযথ ব্যবস্থা গ্রহণ করুন।

সমাধান

যদি আপনি দেখেন যে নতুন কোনো সংস্করণে ভার্চুয়াল হোস্ট বা হোস্টগুলো সরিয়ে ফেলা হয়েছে, তবে তা ইচ্ছাকৃত বা দুর্ঘটনাবশত হতে পারে। প্রতিটি ক্ষেত্রে, সমস্যাটি সমাধান করার জন্য নিম্নলিখিত সমাধান/প্রস্তাবিত পদক্ষেপগুলো অনুসরণ করুন।

দৃশ্যকল্প #১: ইচ্ছাকৃত পরিবর্তন

যদি ভার্চুয়াল হোস্ট অপসারণ ইচ্ছাকৃত হয়, তাহলে আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে একটি বেছে নিতে পারেন, যার মধ্যে প্রথম বিকল্পটিই প্রস্তাবিত পদ্ধতি:

  1. একটি ভিন্ন বেস পাথ সহ একটি নতুন প্রক্সি তৈরি করুন এবং একটি ভিন্ন ভার্চুয়াল হোস্ট ব্যবহার করুন (যা পূর্বে ডেপ্লয় করা রিভিশনে বিদ্যমান নেই)।
  2. আপনি যদি বিদ্যমান এপিআই প্রক্সি ব্যবহার করা চালিয়ে যেতে চান কিন্তু একটি ভিন্ন ভার্চুয়াল হোস্ট ব্যবহার করতে চান, তাহলে বিদ্যমান ভার্চুয়াল হোস্টটি অপরিবর্তিত রেখে অতিরিক্ত ভার্চুয়াল হোস্টটি যুক্ত করাই শ্রেয়।

    এর মাধ্যমে নিশ্চিত করা হবে যে এই এপিআই প্রক্সির ব্যবহারকারীরা এই পরিবর্তনের দ্বারা প্রভাবিত হবেন না।

  3. আপনি যদি বিদ্যমান এপিআই প্রক্সি ব্যবহার করতে চান এবং আপনার শুধু একটি ভিন্ন ভার্চুয়াল হোস্ট থাকে, তাহলে আপনার ব্যবহারকারীদের আগে থেকে জানিয়ে দিন এবং রক্ষণাবেক্ষণের সময় এই পরিবর্তনটি করুন।

    এর ফলে এই এপিআই প্রক্সির ব্যবহারকারীরা পরিবর্তনটি সম্পর্কে অবগত থাকবেন এবং এই এপিআই প্রক্সিতে কল করার জন্য একটি ভিন্ন ভার্চুয়াল হোস্ট ব্যবহার করতে পারবেন। ফলে, তারা এই পরিবর্তনের দ্বারা অপ্রভাবিত থাকবেন।

দৃশ্যকল্প #২: অনিচ্ছাকৃত পরিবর্তন

যদি ভার্চুয়াল হোস্টটি অনিচ্ছাকৃতভাবে এবং ভুলবশত অপসারণ করা হয়, তাহলে নিম্নলিখিতগুলি করুন:

  1. পূর্ববর্তী ডেপ্লয় করা রিভিশনে ব্যবহৃত ভার্চুয়াল হোস্টগুলো ব্যবহার করার জন্য বর্তমানে ডেপ্লয় করা রিভিশনের ProxyEndpoint কনফিগারেশন আপডেট করুন। উপরের উদাহরণে, নিম্নলিখিত অংশটি পরিবর্তন করুন:
    <HTTPProxyConnection>
        <BasePath>/weather</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>

    থেকে

    <HTTPProxyConnection>
        <BasePath>/weather</BasePath>
        <Properties/>
        <VirtualHost>vh1</VirtualHost>
    </HTTPProxyConnection>
  2. সংস্করণটি পুনরায় স্থাপন করুন।

সর্বোত্তম অনুশীলন

নতুন প্রক্সি বা নতুন সংস্করণগুলো রক্ষণাবেক্ষণের সময় অথবা যখন ট্র্যাফিক সবচেয়ে কম থাকার সম্ভাবনা থাকে, তখন স্থাপন করাই সর্বদা বাঞ্ছনীয়, যাতে স্থাপনের সময় উদ্ভূত কোনো সমস্যা এড়ানো যায় বা ট্র্যাফিকের উপর এর প্রভাব কমানো যায়।

কারণ: পাথটি কোনো এপিআই প্রক্সির সাথে সংযুক্ত নয়

যদি এপিআই রিকোয়েস্ট ইউআরএল-এ ব্যবহৃত নির্দিষ্ট পাথের জন্য রিকোয়েস্ট গ্রহণ করতে এপিআই প্রক্সি কনফিগার করা না থাকে, তাহলে আমরা Unable to identify proxy for host: VIRTUAL_HOST and url: PATH . এই এরর মেসেজ সহ একটি 404 Not Found রেসপন্স পেতে পারি।

রোগ নির্ণয়

  1. আপনি যে নির্দিষ্ট এপিআই প্রক্সির মাধ্যমে এপিআই অনুরোধগুলো করতে চেয়েছিলেন, তার ProxyEndpoint কনফিগারেশনটি দেখুন।
  2. এরর মেসেজে উল্লেখিত নির্দিষ্ট পাথের জন্য রিকোয়েস্ট গ্রহণ করতে এপিআই প্রক্সিটি কনফিগার করা আছে কিনা তা যাচাই করুন। সিনারিও #১ এবং সিনারিও #২- এর ধাপগুলো অনুসরণ করে আপনি এটি করতে পারেন।

দৃশ্যকল্প #১: পাথটি এপিআই প্রক্সির বেসপাথের সাথে মেলে না

  1. যদি ত্রুটির বার্তায় নির্দেশিত path নির্দিষ্ট এপিআই প্রক্সির basepath সমান না হয় অথবা basepath দিয়ে শুরু না হয়, তাহলে সেটিই ত্রুটির কারণ হতে পারে।
  2. বিষয়টি বোঝানোর জন্য একটি উদাহরণ নেওয়া যাক:
    1. উদ্দিষ্ট এপিআই প্রক্সির basepath হলো /weather
    2. এপিআই অনুরোধের ইউআরএলটি হলো https://myorg-prod.apigee.net/climate । এর মানে হলো, এপিআই অনুরোধের ইউআরএল-এ ব্যবহৃত পাথটি হলো /climate.
  3. এই উদাহরণে, path basepath মতো নয় এবং এটি basepath দিয়ে শুরুও হয় না। তাই আপনি নিম্নলিখিত ত্রুটিটি পাচ্ছেন:
    {
       "fault":{
          "faultstring":"Unable to identify proxy for host: secure and url: \/climate",
          "detail":{
             "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
          }
       }
    }

সমাধান

  1. আপনার এপিআই অনুরোধের ইউআরএল-এ ব্যবহৃত path যেন নির্দিষ্ট এপিআই প্রক্সির basepath সমান হয়, তা নিশ্চিত করুন।
  2. উপরের উদাহরণে, এপিআই অনুরোধের ইউআরএলটি নিম্নরূপ হওয়া উচিত:
    {
    https://myorg-prod.apigee.net/weather

দৃশ্যকল্প #২: পথটি উপলব্ধ কোনো শর্তাধীন প্রবাহের সাথে মেলে না

  1. যদি এপিআই রিকোয়েস্ট ইউআরএল-এ ব্যবহৃত path basepath দিয়ে শুরু হয়, তাহলে এরর মেসেজে উল্লেখিত path suffix ( basepath পরের অংশ) কোনো কন্ডিশনাল ফ্লো-এর সাথে না মিলতে পারে, যার ফলে 404 এরর হতে পারে।
  2. বিষয়টি বোঝানোর জন্য একটি উদাহরণ নেওয়া যাক:
    1. উদ্দিষ্ট এপিআই প্রক্সির basepath হলো /weather
    2. এপিআই অনুরোধের ইউআরএলটি হলো https://myorg-prod.apigee.net/weather/Delhi । এর মানে হলো, এপিআই অনুরোধের ইউআরএল-এ ব্যবহৃত পাথটি হলো /weather/Delhi.
  3. এই উদাহরণে, path /weather basepath দিয়ে শুরু হয়েছে। এছাড়াও, এর একটি /Delhi path suffix রয়েছে।
  4. এখন ProxyEndpoint এ কোনো শর্তাধীন ফ্লো আছে কিনা তা পরীক্ষা করে দেখুন।
  5. যদি কোনো শর্তাধীন ফ্লো না থাকে অথবা কয়েকটি শর্তহীন ফ্লো থাকে, তাহলে পরবর্তী কারণটি দেখুন - পরিবেশে এপিআই প্রক্সি স্থাপন করা হয়নি
  6. যদি ProxyEndpoint এ শুধুমাত্র শর্তসাপেক্ষ ফ্লো থাকে, তাহলে নিম্নলিখিত বিষয়গুলো যাচাই করুন:
    1. যদি এই সমস্ত শর্তাধীন ফ্লো-এর শর্তগুলি একটি নির্দিষ্ট proxy.pathsuffix (basepath-এর পরের পাথ) পরীক্ষা করে।
    2. এবং যদি এপিআই রিকোয়েস্ট ইউআরএল-এ উল্লেখিত path suffix কোনো শর্তের সাথে না মেলে, তাহলে সেটাই ত্রুটির কারণ।
  7. ধরা যাক, ProxyEndpoint এ আমাদের দুটি ফ্লো আছে এবং দুটিই শর্তসাপেক্ষ ফ্লো, যেমনটি নিচে দেখানো হয়েছে:
    <Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition>
    
    <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
    1. উপরে দেখানো উদাহরণে, আমাদের দুটি শর্তাধীন ফ্লো আছে; একটি proxy.pathsuffix (বেসপ্যাথের পরের পাথ) কে /Bangalore সাথে মেলায় এবং অন্যটি /Chennai সাথে মেলায়। কিন্তু এমন কোনো ফ্লো নেই যা /Delhi সাথে মেলে, অথচ এপিআই রিকোয়েস্ট ইউআরএল-এ path suffix হিসেবে এটি পাস করা হয়েছে।
    2. এটাই হলো 404 এররের কারণ। তাই আপনি নিম্নলিখিত এররটি পাবেন:
      {
         "fault":{
            "faultstring":"Unable to identify proxy for host: secure and url: \/weather\/Delhi",
            "detail":{
               "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
            }
         }
      }

সমাধান

  1. নিশ্চিত করুন যে path suffix আপনার প্রক্সি এন্ডপয়েন্টের শর্তাধীন ফ্লোগুলোর অন্তত একটির সাথে মেলে।
  2. উপরের উদাহরণে, ত্রুটিটি সমাধান করার জন্য আপনি নিম্নলিখিত পদ্ধতিগুলোর যেকোনো একটি ব্যবহার করতে পারেন:
    1. আপনি যদি /Delhi পাথের জন্য কোনো নির্দিষ্ট পলিসি সেট কার্যকর করতে চান, তাহলে প্রয়োজনীয় পলিসি সেট সহ একটি আলাদা ফ্লো যোগ করুন এবং নিশ্চিত করুন যে সেখানে /proxy.pathsuffix /Delhi এর সাথে মেলে এমন একটি শর্ত রয়েছে, যেমনটি নিচে দেখানো হয়েছে:
      <Condition>(proxy.pathsuffix MatchesPath "/Delhi") and (request.verb = "GET")</Condition>
    2. আপনি যদি /Delhi পাথের জন্য সাধারণ পলিসি সেট কার্যকর করতে চান, তাহলে কমন ফ্লো-তে নিশ্চিত করুন যে এমন একটি শর্ত আছে যা একটি জেনেরিক /proxy.pathsuffix অনুমতি দেয়। অর্থাৎ, এটি basepath /weather পরের যেকোনো পাথকে অনুমতি দেবে, যেমনটি নিচে দেখানো হয়েছে:
      <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>

যদি ProxyEndpoint সঠিক basepath থাকে এবং API URL-এ নির্দিষ্ট করা path suffix শর্তাধীন ফ্লোগুলোর কোনো একটির সাথে মিলে যায়, তাহলে পরবর্তী কারণটিতে যান - কোনো এনভায়রনমেন্টে API প্রক্সি ডেপ্লয় করা হয়নি

কারণ: পরিবেশে এপিআই প্রক্সি স্থাপন করা হয়নি

রোগ নির্ণয়

  1. আপনার এপিআই অনুরোধের ইউআরএল-এ ব্যবহৃত হোস্ট অ্যালিয়াসটি কোন এনভায়রনমেন্টে বিদ্যমান, তা নির্ধারণ করুন। এজ ইউআই-তে আপনার প্রতিষ্ঠানের প্রতিটি এনভায়রনমেন্টের সমস্ত ভার্চুয়াল হোস্টের বিবরণ যাচাই করে এটি করা যেতে পারে।

    উদাহরণস্বরূপ, নিম্নলিখিত বিন্যাসটি ধরে নিন:

    • যদি http://myorg-prod.apigee.net/weather আপনার URL হয়, তাহলে myorg-prod.apigee.net হলো হোস্ট অ্যালিয়াস।
    • myorg-prod.apigee.net হোস্ট অ্যালিয়াসটি আপনার প্রতিষ্ঠানের prod এনভায়রনমেন্টের ভার্চুয়াল হোস্টগুলোর একটির অংশ হিসেবে কনফিগার করা হয়েছে।
  2. উপরে ধাপ ১-এ নির্ধারিত নির্দিষ্ট পরিবেশে নির্দিষ্ট এপিআই প্রক্সিটি ডেপ্লয় করা আছে কিনা তা যাচাই করে দেখুন।
  3. যদি নির্দিষ্ট পরিবেশে এপিআই প্রক্সি স্থাপন করা না থাকে, তাহলে সেটাই 404 ত্রুটির কারণ।
    1. সুতরাং, উপরে ধাপ ১-এ ব্যবহৃত উদাহরণে, ধরা যাক API প্রক্সিটি prod এনভায়রনমেন্টে ডেপ্লয় করা নেই, তাহলে সেটাই হলো এররটির কারণ।
    2. নিচের রেজোলিউশন বিভাগে যান।
  4. যদি এপিআই প্রক্সিটি নির্দিষ্ট এনভায়রনমেন্টে ডেপ্লয় করা থাকে, তাহলে পরবর্তী কারণটি দেখুন - মেসেজ প্রসেসরগুলিতে এনভায়রনমেন্ট লোড হয়নি

সমাধান

যে নির্দিষ্ট পরিবেশে আপনি এপিআই অনুরোধ করতে চান, সেখানে এপিআই প্রক্সিটি স্থাপন করুন।

কারণ: মেসেজ প্রসেসরগুলিতে এনভায়রনমেন্ট লোড করা হয়নি

রোগ নির্ণয়

  1. প্রতিটি মেসেজ প্রসেসরে লগ ইন করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে পরীক্ষা করুন যে, আপনি যে নির্দিষ্ট এনভায়রনমেন্ট থেকে এপিআই অনুরোধটি করছেন, সেটি মেসেজ প্রসেসরে লোড হয়েছে কি না:
    curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
  2. যদি নির্দিষ্ট পরিবেশটি উপরের কমান্ডের অংশ হিসাবে তালিকাভুক্ত থাকে, তাহলে পরবর্তী কারণটিতে যান - এক বা একাধিক মেসেজ প্রসেসরে এপিআই প্রক্সি স্থাপন করা হয়নি
  3. যদি নির্দিষ্ট এনভায়রনমেন্টটি তালিকাভুক্ত না থাকে, তাহলে এনভায়রনমেন্ট লোড করার সময় কোনো ত্রুটি হয়েছে কিনা তা জানতে মেসেজ প্রসেসরগুলিতে থাকা /opt/apigee/var/log/edge-message-processor/logs/system.log এবং /opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log ফাইলগুলি পরীক্ষা করুন।
  4. বিভিন্ন ধরনের ত্রুটির কারণে মেসেজ প্রসেসরে কোনো এনভায়রনমেন্ট লোড হতে ব্যর্থ হতে পারে। এর সমাধান নির্ভর করে কী ধরনের ত্রুটি ঘটেছে তার ওপর।

সমাধান

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

  1. যদি আপনি মেসেজ প্রসেসর লগে নিম্নলিখিত ত্রুটিগুলির মধ্যে কোনো একটি দেখতে পান, তাহলে এটি নির্দিষ্ট পরিবেশে নির্দিষ্ট কীস্টোর/ট্রাস্টস্টোরে যোগ করা সার্টিফিকেট/কী-গুলিতে পাওয়া কোনো সমস্যার কারণে ঘটে থাকে।

    ত্রুটি #১: java.security.KeyStoreException: নিজের সার্টিফিকেট ওভাররাইট করা যাবে না

    2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na]
    at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na]
    
    Caused by: java.security.KeyStoreException: Cannot overwrite own certificate
    at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151]
    at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151]
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]

    ... 20 common frames omitted

    2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert

    ত্রুটি #২: java.security.KeyStoreException: গোপন কী ওভাররাইট করা যাবে না

    2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na]
    ...
    Caused by: java.security.KeyStoreException: Cannot overwrite secret key
    at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144]
    at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144]
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]
    ... 20 common frames omitted
    
    2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
  2. পূর্ববর্তী ধাপে দেখানো ত্রুটি বার্তায় উল্লেখিত কীস্টোর/ট্রাস্টস্টোরের বিবরণ পেতে নিম্নলিখিত ম্যানেজমেন্ট এপিআই কলটি ব্যবহার করুন:
    curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user> 

    উদাহরণ আউটপুট:

    {
       "certs":[
          "mycert",
          "mycert-new"
       ],
       "keys":[
          "mycert"
       ],
       "name":"myTruststore"
    }
  3. উদাহরণ আউটপুট থেকে দেখা যায় যে, myTruststore ট্রাস্টস্টোরটিতে দুটি সার্টিফিকেট এবং একটি কী রয়েছে। ট্রাস্টস্টোরে সাধারণত কোনো কী থাকে না। যদি থাকে, তবে একটিমাত্র সার্টিফিকেট এবং একটিমাত্র কী থাকাই শ্রেয়।
  4. নিম্নলিখিত API ব্যবহার করে সার্টিফিকেট দুটি সম্পর্কে বিস্তারিত তথ্য জানুন:
    curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
    
  5. প্রতিটি সার্টিফিকেটের মেয়াদ শেষ হওয়ার তারিখ যাচাই করুন এবং মেয়াদোত্তীর্ণ/পুরানো সার্টিফিকেটটি শনাক্ত করুন।
  6. myTruststore ট্রাস্টস্টোর থেকে মেয়াদোত্তীর্ণ বা অপ্রয়োজনীয় সার্টিফিকেটটি মুছে ফেলুন।

যদি সমস্যাটি এখনও থেকে যায় অথবা উপরে ধাপ ১-এ উল্লিখিত ত্রুটিগুলি ছাড়া অন্য কোনো ত্রুটি দেখতে পান, তাহলে "অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন" অংশে যান।

কারণ: এক বা একাধিক মেসেজ প্রসেসরে এপিআই প্রক্সি স্থাপন করা হয়নি

এক বা একাধিক মেসেজ প্রসেসরে এপিআই প্রক্সি ডেপ্লয় করা নাও থাকতে পারে। এই সমস্যাটি খুব কমই ঘটে এবং বেশিরভাগ ক্ষেত্রে নির্দিষ্ট এপিআই প্রক্সি ডেপ্লয়মেন্টের সময় ম্যানেজমেন্ট সার্ভার থেকে মেসেজ প্রসেসরে ইভেন্ট নোটিফিকেশন না যাওয়ার কারণে এটি হয়ে থাকে। এক্ষেত্রেও, আপনি এজ ইউআই-তে ট্রেস সেশন তৈরি করতে পারবেন না।

রোগ নির্ণয়

  1. নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রতিটি মেসেজ প্রসেসরে লগইন করুন এবং এপিআই প্রক্সির নির্দিষ্ট সংস্করণটি ডেপ্লয় করা হয়েছে কি না, তা পরীক্ষা করে দেখুন:
    curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
    
  2. যদি উপরের ধাপ ১-এ উল্লিখিত কমান্ডের আউটপুট হিসাবে API প্রক্সির নির্দিষ্ট সংস্করণটি না দেখা যায়, তাহলে সমাধান (Resolution) অংশে ব্যাখ্যা করা অনুযায়ী নির্দিষ্ট মেসেজ প্রসেসরটি পুনরায় চালু করুন।
  3. সমস্ত মেসেজ প্রসেসরের জন্য ধাপ ১-২ পুনরাবৃত্তি করুন।
  4. যদি এপিআই প্রক্সির নির্দিষ্ট সংস্করণটি সমস্ত মেসেজ প্রসেসরে স্থাপন করা থাকে, তাহলে এটি এই সমস্যার কারণ নয়। 'অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন ' অংশে যান।

সমাধান

সেই নির্দিষ্ট মেসেজ প্রসেসরগুলো পুনরায় চালু করুন, যেগুলোতে এপিআই প্রক্সির নির্দিষ্ট সংস্করণটি স্থাপন করা হয়নি।

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

এপিআই মনিটরিং ব্যবহার করে সমস্যা নির্ণয় করুন

এপিআই মনিটরিং আপনাকে ত্রুটি, পারফরম্যান্স, এবং লেটেন্সি সমস্যা ও সেগুলোর উৎস—যেমন ডেভেলপার অ্যাপ, এপিআই প্রক্সি, ব্যাকএন্ড টার্গেট বা এপিআই প্ল্যাটফর্ম—দ্রুত শনাক্ত করে সমস্যাযুক্ত এলাকাগুলো চিহ্নিত করতে সক্ষম করে।

এই সমস্যার জন্য, আপনি API Monitoring > Investigate পৃষ্ঠায় গিয়ে উপযুক্ত তারিখ, প্রক্সি ইত্যাদি নির্বাচন করতে পারেন এবং নিম্নলিখিত বিবরণ দেখতে পারেন:

Fault code and status code in UI

  • ত্রুটি কোড: messaging.adaptors.http.flow.ApplicationNotFound
  • স্ট্যাটাস কোড: 404
  • ত্রুটির উৎস: Apigee বা MP

এছাড়াও, আপনি উপরের স্ক্রিনশটে দেখানো অনুযায়ী ‘ভিউ লগস’-এ ক্লিক করে আরও যাচাই করতে পারেন।

view logs

একটি নমুনা পরিস্থিতির মাধ্যমে দেখানো হয়েছে কিভাবে এপিআই মনিটরিং ব্যবহার করে আপনার এপিআই-এর 5xx সমস্যাগুলো সমাধান করা যায়। উদাহরণস্বরূপ, আপনি হয়তো এমন একটি অ্যালার্ট সেট আপ করতে চাইতে পারেন, যার মাধ্যমে 404 স্ট্যাটাস কোডের সংখ্যা একটি নির্দিষ্ট সীমা অতিক্রম করলে আপনাকে জানানো হবে।

রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে

উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যাটি থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন। Apigee Edge Support-এর সাথে যোগাযোগ করুন এবং এই তথ্য তাদের সাথে শেয়ার করুন।

  1. আপনি যদি পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:
    • সংস্থার নাম
    • পরিবেশের নাম
    • এপিআই প্রক্সি নাম
    • ত্রুটিটি পুনরুৎপাদন করতে সম্পূর্ণ কার্ল (curl) কমান্ডটি ব্যবহার করুন।
  2. আপনি যদি প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:
    • সম্পূর্ণ ত্রুটি বার্তা পরিলক্ষিত হয়েছে
    • পরিবেশের নাম
    • এপিআই প্রক্সি বান্ডেল
    • মেসেজ প্রসেসর লগ /opt/apigee/var/log/edge-message-processor/logs/system.log
    • প্রতিটি মেসেজ প্রসেসরে নিম্নলিখিত কমান্ডগুলোর আউটপুট।
    • curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
      curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
            
  3. এই প্লেবুকের কোন কোন অংশ আপনি চেষ্টা করেছেন সে সম্পর্কিত বিবরণ এবং অন্য যেকোনো তথ্য যা আমাদের এই সমস্যার সমাধান দ্রুত করতে সাহায্য করবে, তা প্রদান করুন।