502 খারাপ গেটওয়ে - ডুপ্লিকেট হেডার

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

লক্ষণ

ক্লায়েন্ট অ্যাপ্লিকেশনটি এপিআই কলের প্রতিক্রিয়া হিসেবে protocol.http.DuplicateHeader .http.DuplicateHeader এরর কোডসহ 502 Bad Gateway HTTP স্ট্যাটাস কোড পায়।

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

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

HTTP/1.1 502 Bad Gateway

এছাড়াও, আপনি নীচে দেখানোটির মতো একটি ত্রুটি বার্তা দেখতে পারেন:

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

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

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

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

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

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

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

এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন:

এপিআই মনিটরিং

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

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

  3. Analyze > API Monitoring > Investigate পৃষ্ঠায় যান।
  4. সেই নির্দিষ্ট সময়সীমাটি নির্বাচন করুন যার মধ্যে আপনি ত্রুটিগুলো লক্ষ্য করেছেন।
  5. নিশ্চিত করুন যে প্রক্সি ফিল্টারটি ‘সকল’ (All) এ সেট করা আছে।
  6. সময়ের সাপেক্ষে ফল্ট কোডের লেখচিত্র অঙ্কন করুন।
  7. নীচে দেখানো অনুযায়ী, যে সেলটিতে ফল্ট কোড protocol.http.DuplicateHeader আছে, সেটি নির্বাচন করুন:

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

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

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

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

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

ট্রেস টুল

ট্রেস টুল ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. ট্রেস সেশনটি সক্রিয় করুন এবং হয়
    1. 502 Bad Gateway ত্রুটিটি ঘটার জন্য অপেক্ষা করুন অথবা
    2. আপনি যদি সমস্যাটি পুনরায় তৈরি করতে পারেন, তাহলে এপিআই কলটি করুন এবং 502 Bad Gateway ত্রুটিটি পুনরায় দেখান।
  2. নিশ্চিত করুন যে ‘Show all Flow Infos’ চালু আছে:

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

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

  6. ট্রেস থেকে ত্রুটির মানটি নোট করুন।

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

  7. ট্রেসটিতে AX (অ্যানালিটিক্স ডেটা রেকর্ড করা) পর্যায়ে যান এবং সেটিতে ক্লিক করুন।
  8. নিচে স্ক্রল করে Phase Details - Response Headers সেকশনে যান এবং নিচে দেখানো অনুযায়ী X-Apigee-fault-code এবং X-Apigee-fault-source- এর মান নির্ধারণ করুন:

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

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

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

    2. "Curl for Request Sent to Target Server" উইন্ডোটি খোলে, যেখান থেকে আপনি টার্গেট সার্ভারের হোস্ট অ্যালিয়াস নির্ধারণ করতে পারেন।

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

এনজিআইএনএক্স

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. যদি আপনি protocol.http.DuplicateHeader এর মানের সাথে মিলে যাওয়া X-Apigee-fault-code সহ কোনো 502 ত্রুটি খুঁজে পান, তাহলে X-Apigee-fault-source-এর মান নির্ধারণ করুন।

    NGINX অ্যাক্সেস লগ থেকে প্রাপ্ত একটি নমুনা ৫০২ এরর:

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

    প্রতিক্রিয়া হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড protocol.http.DuplicateHeader
    এক্স-এপিজি-ফল্ট-সোর্স target

কারণ: প্রতিক্রিয়ায় ডুপ্লিকেট হেডার।

রোগ নির্ণয়

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

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

    ত্রুটির বার্তা ব্যবহার করে:

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

      নমুনা ত্রুটি বার্তা:

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

    প্রকৃত অনুরোধ

    প্রকৃত অনুরোধ ব্যবহার করে:

    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 হেডার পাঠাচ্ছে তার কারণ বিশ্লেষণ করুন এবং এপিআই প্রক্সিগুলোর জন্য তা গ্রহণ করা সমীচীন হবে কিনা তা যাচাই করুন। HTTP স্পেসিফিকেশন RFC7230 অনুযায়ী, বেশিরভাগ ক্ষেত্রেই এটি কাম্য হবে না।
  2. যদি এটি অনাকাঙ্ক্ষিত হয়, তবে আপনার টার্গেট সার্ভার অ্যাপ্লিকেশনটি এমনভাবে পরিবর্তন করুন যাতে এটি ডুপ্লিকেট হেডার না পাঠায়। উপরে আলোচিত উদাহরণে দেখা যায় যে, Expires হেডারটি একই মান সহ দুইবার পাঠানো হয়েছে, যা অনাকাঙ্ক্ষিত। টার্গেট সার্ভার যেন Expires হেডারটি শুধুমাত্র একবার পাঠায়, তা নিশ্চিত করার মাধ্যমে আপনি এই সমস্যাটি সমাধান করতে পারেন।
  3. যদি এটি কাম্য হয় এবং আপনি ডুপ্লিকেট হেডারগুলির অনুমতি দিতে চান, তাহলে বিকল্প #২-এ যান: 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 Support-এর সাথে যোগাযোগ করুন।

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

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

স্পেসিফিকেশন
আরএফসি ৭২৩০, ধারা ৩.২.২: ফিল্ড অর্ডার
আরএফসি ৭২৩০, ধারা ৩.২: হেডার ফিল্ড

আপনার যদি এখনও Apigee Support-এর কাছ থেকে কোনো সাহায্যের প্রয়োজন হয়, তাহলে Must gather diagnostic information- এ যান।

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

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

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

  • সংস্থার নাম
  • পরিবেশের নাম
  • এপিআই প্রক্সি নাম
  • 502 ত্রুটিটি পুনরুৎপাদন করতে ব্যবহৃত সম্পূর্ণ curl কমান্ড।
  • এপিআই অনুরোধগুলির ট্রেস ফাইল

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

  • ব্যর্থ অনুরোধগুলির জন্য সম্পূর্ণ ত্রুটি বার্তা পরিলক্ষিত হয়েছে।
  • পরিবেশের নাম
  • এপিআই প্রক্সি বান্ডেল
  • এপিআই অনুরোধগুলির ট্রেস ফাইল
  • 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