502 गलत गेटवे - डुप्लीकेट हेडर

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

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

क्लाइंट ऐप्लिकेशन को गड़बड़ी कोड के साथ 502 Bad Gateway का एक एचटीटीपी स्टेटस कोड मिलता है protocol.http.DuplicateHeader का इस्तेमाल, एपीआई कॉल के रिस्पॉन्स के तौर पर किया जाता है.

गड़बड़ी का मैसेज

क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:

HTTP/1.1 502 Bad Gateway

इसके अलावा, आपको गड़बड़ी का ऐसा मैसेज भी दिख सकता है जो नीचे दिए गए मैसेज से मिलता-जुलता है:

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

संभावित वजहें

यह गड़बड़ी तब होती है, जब कोई ऐसा एचटीटीपी हेडर हो जिसे Apigee में डुप्लीकेट बनाने की अनुमति नहीं है Edge, एक ही या अलग-अलग वैल्यू के साथ एक से ज़्यादा बार दिखता है. ऐसा, Google के भेजे गए एचटीटीपी रिस्पॉन्स के हिस्से के तौर पर होता है बैकएंड सर्वर को Apigee Edge से जोड़ना होगा.

के अनुसार आरएफ़सी 7230, सेक्शन 3.2.2: फ़ील्ड ऑर्डर, ईमेल भेजने वाले को एक से ज़्यादा हेडर जनरेट नहीं करना चाहिए किसी मैसेज में उसी फ़ील्ड नाम के साथ फ़ील्ड शामिल करें, जब तक कि उसके लिए पूरा फ़ील्ड मान न हो हेडर फ़ील्ड को कॉमा लगाकर अलग की गई सूची के तौर पर दिखाया जाता है, [यानी, #(values)] या हेडर फ़ील्ड लोकप्रिय अपवाद. अगर Apigee Edge को कोई खास हेडर मिलता है, तो इनके डुप्लीकेट मौजूद होते हैं. इन्हें एचटीटीपी रिस्पॉन्स में एक से ज़्यादा बार भेजा जाता है टारगेट/बैकएंड सर्वर, इसके बाद, यह 502 Bad Gateway और गड़बड़ी के कोड के साथ जवाब देता है protocol.http.DuplicateHeader

इस गड़बड़ी की ये वजहें हो सकती हैं:

वजह ब्यौरा इसके लिए लागू होने वाले, समस्या हल करने के निर्देश
जवाब में डुप्लीकेट हेडर बैकएंड सर्वर से मिलने वाले रिस्पॉन्स में डुप्लीकेट हेडर शामिल हैं. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता

गड़बड़ी की जांच करने के सामान्य तरीके

इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी एक टूल/तकनीक का इस्तेमाल करें:

एपीआई मॉनिटरिंग

एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें भूमिका होनी चाहिए.
  2. उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.

  3. विश्लेषण > एपीआई मॉनिटरिंग > पेज की जांच करें.
  4. वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखी थीं.
  5. पक्का करें कि प्रॉक्सी फ़िल्टर सभी पर सेट किया गया हो.
  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. पक्का करें कि सभी फ़्लो जानकारी दिखाएं चालू है:

  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. इसे तय करने के लिए, टारगेट को भेजा गया अनुरोध सर्वर फ़ेज़ पर वापस जाएं. कर्ल दिखाएं पर क्लिक करें.

    2. टारगेट सर्वर को भेजे गए अनुरोध का कर विंडो खुलती है. यहां से टारगेट सर्वर होस्ट का उपनाम तय करें.

    3. अगर टारगेट सर्वर होस्ट का उपनाम किसी वर्चुअल होस्ट के उपनाम से जुड़ा है, तो वह प्रॉक्सी है चेन बनाना. ऐसी स्थिति में, आपको एक से ज़्यादा बार इस्तेमाल होने वाले प्रॉक्सी के लिए ऊपर दिए गए सभी चरणों को आप पता लगाते हैं कि 502 Bad Gateway गड़बड़ी की असल वजह क्या है.
    4. अगर टारगेट सर्वर होस्ट का उपनाम आपके बैकएंड सर्वर पर ले जाता है, तो यह बताता है कि आपका बैकएंड सर्वर, Apigee के रिस्पॉन्स में डुप्लीकेट हेडर भेज रहा है.

NGINX

NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:

  1. अगर आप निजी Cloud उपयोगकर्ता हैं, तो NGINX ऐक्सेस लॉग का इस्तेमाल इन कामों के लिए किया जा सकता है एचटीटीपी 502 गड़बड़ियों के बारे में अहम जानकारी तय करते हैं.
  2. NGINX ऐक्सेस लॉग देखें:

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

    कहां: ORG, ENV और PORT# को इससे बदल दिया गया है सेट करें.

  3. खोज करके देखें कि किसी तय अवधि के दौरान, कोई 502 गड़बड़ी हुई या नहीं (अगर समस्या पहले हुई है) या कोई अनुरोध अब भी पूरा नहीं हो पा रहा है 502.
  4. अगर आपको X-Apigee-fault-कोड में कोई 502 गड़बड़ी मिलती है वैल्यू का protocol.http.DuplicateHeader से मिलान करें, फिर 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. एपीआई का इस्तेमाल करके मिली गड़बड़ी के लिए, गलत कोड और गलत सोर्स का पता लगाएं मॉनिटरिंग या NGINX ऐक्सेस लॉग के बारे में जानकारी, जैसा कि गड़बड़ी की जानकारी देने के सामान्य तरीके में बताया गया है.
  2. अगर गलत सोर्स की वैल्यू target है, तो यह दिखाता है कि रिस्पॉन्स टारगेट सर्वर से भेजे जाने वाले ईमेल में डुप्लीकेट हेडर हैं.
  3. इससे यह पता लगाया जा सकता है कि जवाब के हिस्से के तौर पर, एक से ज़्यादा बार असल हेडर कौनसा है नीचे दिए गए तरीकों में से किसी एक का इस्तेमाल करके:

    गड़बड़ी का मैसेज

    गड़बड़ी के मैसेज का इस्तेमाल करके:

    1. अगर आपके पास Apigee Edge से मिले, गड़बड़ी के पूरे मैसेज का ऐक्सेस है, तो देखें faultstring तक. faultstring में हेडर का नाम होता है, जो को एक से ज़्यादा बार भेजा गया है.

      गड़बड़ी के मैसेज का उदाहरण:

      "faultstring":"Duplicate Header \"Expires\""
      
    2. ऊपर दिए गए गड़बड़ी के मैसेज में, आप देख सकते हैं कि हेडर Expires भेजा जा चुका है एक से ज़्यादा बार देखा गया है जैसा faultstring में देखा गया है.

    असल अनुरोध

    असल अनुरोध का इस्तेमाल करके:

    1. अगर आपके पास टारगेट सर्वर से किए गए असल अनुरोध का ऐक्सेस नहीं है, तो इससे जुड़ा curl कमांड ट्रेस टूल का इस्तेमाल करना चरण 10.a और चरण 10.b.
    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 पर जाकर पुष्टि करें कि एपीआई प्रॉक्सी के लिए इसे स्वीकार करना ठीक है या नहीं. तय सीमा में ऐसा हो सकता है कि एचटीटीपी स्पेसिफ़िकेशन के मुताबिक, ऐसा करना ज़रूरी न हो. RFC7230.
  2. अगर ऐसा करना ज़रूरी नहीं है, तो अपने टारगेट सर्वर ऐप्लिकेशन में बदलाव करें, ताकि डुप्लीकेट हेडर न भेजे जाएं. ऊपर बताए गए उदाहरण में, यह पता चला है कि हेडर Expires भेजा गया है समान मान के साथ दो बार ऐसा करें, जो अवांछनीय नहीं है. समस्या हल करने के लिए, यह पक्का करें कि कि टारगेट सर्वर Expires हेडर को सिर्फ़ एक बार पास करता है.
  3. अगर आपको डुप्लीकेट हेडर की अनुमति देनी है, तो यहां जाएं CwC प्रॉपर्टी का इस्तेमाल करने का दूसरा विकल्प.

CwC

दूसरा विकल्प CwC प्रॉपर्टी का इस्तेमाल करना

Apigee, एक CwC प्रॉपर्टी उपलब्ध कराता है HTTPHeader.<HeaderName> ,जो क्लाइंट ऐप्लिकेशन और टारगेट सर्वर का इस्तेमाल, Apigee Edge में एपीआई प्रॉक्सी को डुप्लीकेट हेडर भेजने के लिए किया जाता है.

CwC प्रॉपर्टी वैल्यू
HTTPHeader.<HeaderName> allowDuplicates,multivalued

उदाहरण के लिए, डुप्लीकेट को अनुमति देने के लिए, मैसेज प्रोसेसर पर यह प्रॉपर्टी सेट की जा सकती है और हेडर Expires के लिए एक से ज़्यादा मान.

HTTPHeader.Expires=allowDuplicates, multiValued
  1. अगर आप निजी Cloud उपयोगकर्ता हैं, तो आपके पास Apigee को रोकने के लिए प्रॉपर्टी को कॉन्फ़िगर करने का विकल्प होता है 502 Bad Gateway गड़बड़ी पैदा करने की वजह से एजुकेटर, भले ही अनुरोध में ये शामिल हों हेडर का इस्तेमाल करके डुप्लीकेट हेडर इस्तेमाल करने के लिए, मैसेज प्रोसेसर को कॉन्फ़िगर करने का तरीका.
  2. अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो इसे कॉन्फ़िगर करने के लिए Apigee Edge की सहायता टीम से संपर्क करें प्रॉपर्टी सेट अप की जा सकती है.

खास जानकारी

Apigee, गड़बड़ी के 502 Bad Gateway रिस्पॉन्स के साथ जवाब देता है, जैसा कि उसे उम्मीद है बैकएंड सर्वर, आरएफ़सी के इन निर्देशों के मुताबिक काम करेगा:

खास जानकारी
आरएफ़सी 7230, सेक्शन 3.2.2: फ़ील्ड ऑर्डर
आरएफ़सी 7230, सेक्शन 3.2: हेडर फ़ील्ड

अगर आपको अब भी Apigee की सहायता टीम से कोई मदद चाहिए, तो ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करना ज़रूरी है.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करना ज़रूरी है

गड़बड़ी की जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.

अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 502 गड़बड़ी को ठीक करने के लिए इस्तेमाल किए गए curl निर्देश को पूरा करें
  • एपीआई अनुरोधों के लिए फ़ाइल ट्रेस करें

अगर आप निजी Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:

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