502 Bad Gateway - DuplicateHeader

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

সমস্যার উপসর্গ

API কলের উত্তর হিসেবে ক্লায়েন্ট অ্যাপ্লিকেশন 502 Bad Gateway HTTP স্ট্যাটাস কোড পায়, যার সাথে protocol.http.DuplicateHeader সমস্যা কোড থাকে।

সমস্যা সংক্রান্ত মেসেজ

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

HTTP/1.1 502 Bad Gateway

এছাড়াও, আপনি নিচে দেখানো মেসেজের মতো কোনও সমস্যার মেসেজ দেখতে পেতে পারেন:

{
   "fault":{
      "faultstring":"Duplicate Header \"Expires\"",
      "detail":{
         "errorcode":"protocol.http.DuplicateHeader"
      }
   }
}

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

Apigee Edge-এ ডুপ্লিকেট থাকার অনুমতি নেই এমন কোনও নির্দিষ্ট HTTP হেডার, ব্যাকএন্ড সার্ভার থেকে Apigee Edge-এ পাঠানো HTTP রেসপন্সের অংশ হিসেবে একই বা আলাদা আলাদা ভ্যালু সহ একাধিকবার দেখা গেলে এই সমস্যা হয়।

RFC 7230, বিভাগ ৩.২.২: ফিল্ডের ক্রমঅনুযায়ী, প্রেরককে কোনও মেসেজে একই ফিল্ডের নাম সহ একাধিক হেডার ফিল্ড তৈরি করা চলবে না, যদি না সেই হেডার ফিল্ডের সম্পূর্ণ ভ্যালু কমা-সেপারেটেড তালিকা হিসেবে সংজ্ঞায়িত করা হয়, [যেমন, #(values)] অথবা হেডার ফিল্ড হল একটি সুপরিচিত ব্যতিক্রম। Apigee Edge যদি দেখে যে, কোনও নির্দিষ্ট একই হেডার, যার ডুপ্লিকেট থাকার অনুমতি নেই, সেটি টার্গেট/ব্যাকএন্ড সার্ভারের পাঠানো HTTP রেসপন্সে একাধিকবার পাঠানো হয়েছে, তাহলে এটি 502 Bad Gateway ও সমস্যা কোড protocol.http.DuplicateHeader দিয়ে উত্তর দেয়

এই সমস্যার সম্ভাব্য কারণগুলি এখানে দেওয়া হল:

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

সাধারণ ডায়াগনসিস ধাপ

এই সমস্যা ডায়াগনসিস করতে নিম্নলিখিত টুল/টেকনিকের মধ্যে একটি ব্যবহার করুন:

API মনিটরিং

API মনিটরিং ব্যবহার করে সমস্যার ডায়াগনসিস করতে:

  1. Apigee Edge UI-তে সাইন-ইন করুন উপযুক্ত ভূমিকা সহ ব্যবহারকারী হিসেবে।
  2. যে প্রতিষ্ঠানে সমস্যাটি তদন্ত করতে চান সেটিতে পরিবর্তন করুন।

  3. বিশ্লেষণ করুন > API মনিটরিং > তদন্ত করুন পৃষ্ঠায় নেভিগেট করুন।
  4. আপনি যে নির্দিষ্ট সময়সীমার মধ্যে সমস্যাটি লক্ষ্য করেছেন সেটি বেছে নিন।
  5. প্রক্সি ফিল্টার সব হিসেবে সেট করা আছে কিনা তা নিশ্চিত করুন।
  6. সময় অনুযায়ী সমস্যার কোড প্লট করুন।
  7. নিচে দেখানো protocol.http.DuplicateHeader ফল্ট কোড আছে এমন একটি সেল বেছে নিন:

    (বড় ছবি দেখুন)

  8. নিচে দেখানো পদ্ধতিতে ফল্ট কোড protocol.http.DuplicateHeader সম্পর্কিত তথ্য দেখানো হয়:

    (বড় ছবি দেখুন)

  9. নিশ্চিত করুন যে উপরে দেখানো উদাহরণে স্ট্যাটাস কোড 502 হিসেবে দেখানো হয়েছে।
  10. লগ দেখুন বিকল্পে ক্লিক করুন এবং ব্যর্থ অনুরোধের সারিটি বড় করে দেখুন।
  11. 'লগ' উইন্ডো থেকে, নিম্নলিখিত বিবরণগুলি নোট করুন:

    • স্ট্যাটাস কোড: 502
    • সমস্যার সোর্স: target
    • সমস্যার কোড: protocol.http.DuplicateHeader.
  12. সমস্যার সোর্স হল target, যা থেকে বোঝা যায় যে ব্যাকএন্ড সার্ভারের উত্তর ডুপ্লিকেট হেডার রয়েছে।

ট্রেস টুল

Trace টুল ব্যবহার করে সমস্যার ডায়াগনসিস করতে:

  1. ট্রেস সেশন চালু করুন এবং এগুলির মধ্যে একটি করুন:
    1. 502 Bad Gateway সমস্যার জন্য অপেক্ষা করুন অথবা
    2. আপনি যদি সমস্যাটি আবার তৈরি করতে পারেন, তাহলে API কল করুন এবং 502 Bad Gateway সমস্যাটি
  2. সব ফ্লো সংক্রান্ত তথ্য দেখুন বিকল্প চালু আছে কিনা দেখুন:

  3. কাজ না করা অনুরোধগুলির মধ্যে একটি বেছে নিন এবং ট্রেস পরীক্ষা করুন।
  4. ট্রেসের বিভিন্ন ফেজ নেভিগেট করুন এবং কোথায় সমস্যা হয়েছে তা খুঁজে বের করুন।
  5. আপনি সাধারণত টার্গেট সার্ভারে অনুরোধ পাঠানো হয়েছে ফেজের পরে ফ্লোতে সমস্যাটি দেখতে পাবেন, যেমন নিচে দেখানো হয়েছে:

    (বড় ছবি দেখুন)

  6. ট্রেস থেকে পাওয়া ত্রুটির ভ্যালু নোট করুন।

    উপরের নমুনা ট্রেসে সমস্যাটি Duplicate Header "Expires" হিসেবে দেখানো হয়েছে। যেহেতু ব্যাকএন্ড সার্ভারে অনুরোধ পাঠানোর পরে Apigee-এর মাধ্যমে সমস্যাটি তৈরি করা হয়েছে, এটি ইঙ্গিত করে যে ব্যাকএন্ড সার্ভার Expires হেডারটি একাধিকবার পাঠিয়েছে।

  7. ট্রেসে AX (Analytics ডেটা রেকর্ড করা হয়েছে) ফেজে নেভিগেট করে সেটিতে ক্লিক করুন।
  8. নিচের দিকে স্ক্রল করে ফেজ বিবরণ - রেসপন্স হেডার বিভাগে যান এবং নিচে দেখানো X-Apigee-fault-code ও X-Apigee-fault-source-এর ভ্যালু নির্ধারণ করুন:

    (বড় ছবি দেখুন)

  9. আপনি X-Apigee-fault-code এবং X-Apigee-fault-source-এর ভ্যালু protocol.http.DuplicateHeader এবং target হিসেবে দেখতে পাবেন, এর থেকে বোঝা যায় যে এই সমস্যাটি হয়েছে কারণ ব্যাকএন্ড সার্ভার Expires রেসপন্স হেডারের জন্য ডুপ্লিকেট হেডার পাস করেছে।
    রেসপন্স হেডার ভ্যালু
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target
  10. আপনি প্রক্সি চেইনিং ব্যবহার করছেন কিনা তা চেক করুন; অর্থাৎ, টার্গেট সার্ভার বা টার্গেট এন্ডপয়েন্ট Apigee-তে অন্য কোনও প্রক্সি ইনভোক করছে কিনা।

    1. এটি নির্ধারণ করতে, টার্গেটে পাঠানো অনুরোধ সার্ভার ফেজে ফিরে যান। Curl দেখুন বিকল্পে ক্লিক করুন।

    2. টার্গেট সার্ভারে পাঠানো অনুরোধের জন্য Curl উইন্ডো খোলে, যেখান থেকে আপনি টার্গেট সার্ভার হোস্টের ছদ্মনাম নির্ধারণ করতে পারবেন।

    3. টার্গেট সার্ভার হোস্ট এলিয়াস যদি ভার্চুয়াল হোস্ট এলিয়াসের দিকে পয়েন্ট করে, তাহলে এটি হল প্রক্সি চেনিং। এই ক্ষেত্রে, চেইন করা প্রক্সির জন্য আপনাকে উপরের সব ধাপ রিপিট করতে হবে, যতক্ষণ না আপনি নির্ধারণ করতে পারছেন যে আসলে কী কারণে 502 Bad Gateway সমস্যা হচ্ছে।
    4. টার্গেট সার্ভার হোস্ট অ্যালিয়াস আপনার ব্যাকএন্ড সার্ভারের দিকে পয়েন্ট করলে, এটি ইঙ্গিত করে যে আপনার ব্যাকএন্ড সার্ভার Apigee-কে দেওয়া উত্তরে ডুপ্লিকেট হেডার পাঠাচ্ছে।

NGINX

NGINX অ্যাক্সেস লগ ব্যবহার করে সমস্যার ডায়াগনসিস করতে:

  1. আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, HTTP 502 সমস্যার ব্যাপারে মূল তথ্য নির্ধারণ করতে আপনি NGINX অ্যাক্সেস লগ ব্যবহার করতে পারবেন।
  2. NGINX অ্যাক্সেস লগ চেক করুন:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    কোথায়: ORG, ENV এবং PORT#-এর জায়গায় আসল ভ্যালু বসাতে হবে।

  3. নির্দিষ্ট সময়সীমার মধ্যে কোনও 502 সমস্যা হয়েছে কিনা তা সার্চ করে দেখুন (যদি সমস্যাটি আগে হয়ে থাকে) অথবা এখনও কোনও অনুরোধ 502 সহ ব্যর্থ হচ্ছে কিনা তা দেখুন।
  4. আপনি যদি X-Apigee-fault-code protocol.http.DuplicateHeader-এর ভ্যালুর সাথে ম্যাচ করা502 কোনও সমস্যা খুঁজে পান, তাহলে X-Apigee-fault-source-এর ভ্যালু নির্ধারণ করুন।

    NGINX অ্যাক্সেস লগ থেকে 502 সমস্যার নমুনা:

    NGINX অ্যাক্সেস লগ থেকে নেওয়া উপরের নমুনা এন্ট্রিতে X- Apigee-fault-code ও X-Apigee-fault-source:-এর জন্য নিম্নলিখিত ভ্যালু আছে

    রেসপন্স হেডার ভ্যালু
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target

কারণ: উত্তরে ডুপ্লিকেট হেডার

ডায়াগনসিস

  1. API মনিটরিং বা NGINX অ্যাক্সেস লগ ব্যবহার করে দেখা সমস্যার জন্য সমস্যার কোড ও সমস্যার সোর্স নির্ধারণ করুন, যা সমস্যার সাধারণ ডায়াগনসিস ধাপ-এ ব্যাখ্যা করা হয়েছে।
  2. সমস্যার সোর্স-এর ভ্যালু target হলে, এটি ইঙ্গিত করে যে টার্গেট সার্ভারের পাঠানো উত্তরে ডুপ্লিকেট হেডার আছে।
  3. আপনি নিম্নলিখিত পদ্ধতির মধ্যে একটি ব্যবহার করে, উত্তরের অংশ হিসেবে একাধিকবার পাঠানো প্রকৃত হেডার নির্ধারণ করতে পারবেন:

    সমস্যা সংক্রান্ত মেসেজ

    সমস্যার মেসেজ ব্যবহার করে:

    1. Apigee Edge থেকে পাওয়া সম্পূর্ণ সমস্যার মেসেজে আপনার অ্যাক্সেস থাকলে, faultstring-এ দেখুন। faultstring-এ হেডার নাম আছে যা একাধিকবার পাঠানো হয়েছে।

      সমস্যার মেসেজের নমুনা:

      "faultstring":"Duplicate Header \"Expires\""
    2. উপরের সমস্যার মেসেজে, আপনি দেখতে পাবেন যে হেডার Expires একাধিকবার পাঠানো হয়েছে যা faultstring-এ দেখা যাচ্ছে।

    আসল অনুরোধ

    আসল অনুরোধ ব্যবহার করে:

    1. টার্গেট সার্ভারে করা আসল অনুরোধে আপনার অ্যাক্সেস না থাকলে, তাহলে ট্রেস টুল ব্যবহার করা ধাপ ১০.ক এবং ধাপ ১০.খ থেকে সংশ্লিষ্ট curl কমান্ড পান।
    2. টার্গেট সার্ভার অ্যাপ্লিকেশনে করা আসল অনুরোধে আপনার অ্যাক্সেস থাকলে, তাহলে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

      1. টার্গেট সার্ভারে কল করুন।

        এই উদাহরণে ব্যবহৃত টার্গেট সার্ভারের জন্য অনুরোধের নমুনা:

        curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
        
      2. উত্তরে দেখানো হেডার তালিকা যাচাই করুন।

        এই উদাহরণে ব্যবহৃত টার্গেট সার্ভারের নমুনা উত্তর:

        * ...Trimmed...
        > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2
        > Host: BACKEND_SERVER_HOST
        > User-Agent: curl/7.64.1
        > Accept: */*
        >
        * Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
        < HTTP/2 200
        < date: Fri, 02 Jul 2021 05:29:07 GMT
        < content-type: application/json
        < content-length: 166
        < server: gunicorn/19.9.0
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < access-control-allow-origin: *
        < access-control-allow-credentials: true
        <
        ----<Response BODY>------
        * Connection #0 to host httpbin.org left intact
        * Closing connection 0

        উপরের উদাহরণে দেখানো অনুরোধে, হেডার Expires একাধিকবার পাঠানো হয়েছে। তাই, এই অনুরোধটি 502 Bad Gateway সমস্যা ও সমস্যার কোড: protocol.http.DuplicateHeader সহ ব্যর্থ হয়।

      3. faultstring-এ যে হেডারটির নাম দেখা যাচ্ছে সেটি যদি ব্যাকএন্ড সার্ভারের উত্তরে একাধিকবার দেখা যায়, তাহলে এটিই এই সমস্যার কারণ। উপরের ক্ষেত্রে, Expires হেডার একাধিকবার পাঠানো হয়েছে।

রেজোলিউশন

ডুপ্লিকেট কন্টেন্ট সংক্রান্ত সমস্যার সমাধান করা

বিকল্প #১ [সাজেস্ট করা বিকল্প] ডুপ্লিকেট হেডার যাতে অন্তর্ভুক্ত না হয় সেই জন্য ব্যাকএন্ড সার্ভার ঠিক করুন

  1. নির্দিষ্ট ব্যাকএন্ড সার্ভার ডুপ্লিকেট হেডার পাঠানোর কারণ বিশ্লেষণ করুন Expires এবং API প্রক্সি সেটি গ্রহণ করতে পারবে কিনা তা যাচাই করুন। বেশিরভাগ ক্ষেত্রে, HTTP স্পেসিফিকেশন RFC7230 অনুযায়ী এটি কাম্য নয়।
  2. এটি অবাঞ্ছিত হলে, ডুপ্লিকেট হেডার না পাঠানোর জন্য আপনার টার্গেট সার্ভার অ্যাপ্লিকেশন পরিবর্তন করুন। উপরে আলোচনা করা উদাহরণে, এটি লক্ষ্য করা গেছে যে হেডার Expires একই মান সহ দুবার পাঠানো হয়েছে, যা কাম্য নয়। টার্গেট সার্ভার যেন Expires হেডার একবারই পাস করে তা নিশ্চিত করে আপনি এই সমস্যার সমাধান করতে পারবেন।
  3. এটি কাঙ্ক্ষিত হলে এবং আপনি ডুপ্লিকেট হেডারকে অনুমতি দিতে চাইলে, বিকল্প #২ CwC প্রপার্টি ব্যবহার করা বিকল্পে যান।

CwC

বিকল্প #২ CwC প্রপার্টি ব্যবহার করা

Apigee একটি CwC প্রপার্টি প্রদান করে HTTPHeader.<HeaderName> ,যা ক্লায়েন্ট অ্যাপ্লিকেশন ও টার্গেট সার্ভারকে Apigee Edge-এ API প্রক্সি সার্ভারে ডুপ্লিকেট হেডার পাঠাতে দেয়।

CwC প্রপার্টি ভ্যালু
HTTPHeader.<HeaderName> allowDuplicates,multivalued

যেমন, মেসেজ প্রসেসরে নিম্নলিখিত প্রপার্টি সেট করা যেতে পারে, যাতে ডুপ্লিকেট ও হেডার Expires-এর একাধিক ভ্যালু অনুমোদিত হয়।

HTTPHeader.Expires=allowDuplicates, multiValued
  1. আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, Apigee Edge যাতে 502 Bad Gateway সমস্যা না তৈরি করতে পারে, তার জন্য প্রপার্টি কনফিগার করতে পারবেন, এমনকি অনুরোধে ডুপ্লিকেট হেডার ব্যবহার করার জন্য মেসেজ প্রসেসর কনফিগার করা সংক্রান্ত নির্দেশিকা ব্যবহার করে ডুপ্লিকেট হেডার থাকলেও এটি করা যাবে।
  2. আপনি পাবলিক ক্লাউড ব্যবহারকারী হলে, আপনার প্রতিষ্ঠানের জন্য এই প্রপার্টি কনফিগার করতে Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন ।

স্পেসিফিকেশন

Apigee 502 Bad Gateway সমস্যার উত্তর দেয় কারণ এটি আশা করে যে ব্যাকএন্ড সার্ভার নিম্নলিখিত RFC স্পেসিফিকেশন অনুযায়ী আচরণ করবে:

স্পেসিফিকেশন
RFC 7230, section 3.2.2: Field Order
RFC 7230, section 3.2: Header Fields

Apigee সহায়তা টিমের থেকে আপনার এখনও কোনও সাহায্যের প্রয়োজন হলে, রোগ নির্ণয় সংক্রান্ত তথ্য অবশ্যই সংগ্রহ করতে হবে লিঙ্কে যান।

অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে

নিচে উল্লেখ করা ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge সহায়তা টিমের সাথে যোগাযোগ করুন।

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

  • সংস্থার নাম
  • পরিবেশের নাম
  • API প্রক্সির নাম
  • 502 সমস্যাটি আবার তৈরি করতে curl কমান্ড সম্পূর্ণ করুন
  • API অনুরোধের জন্য ট্রেস ফাইল

আপনি প্রাইভেট ক্লাউড ব্যবহারকারী হলে, নিম্নলিখিত তথ্য দিন:

  • অনুরোধ সম্পূর্ণ না হওয়ার ক্ষেত্রে দেখা সম্পূর্ণ সমস্যার মেসেজ
  • পরিবেশের নাম
  • API প্রক্সি বান্ডেল
  • API অনুরোধের জন্য ট্রেস ফাইল
  • NGINX অ্যাক্সেস লগ:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    কোথায়: ORG, ENV ও PORT# পরিবর্তিত হয়ে আসল ভ্যালু হয়ে যায়।

  • মেসেজ প্রসেসর সিস্টেম লগ /opt/apigee/var/log/edge-message-processor/logs/system.log