502 गलत गेटवे - TOBigHeaders

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

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

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

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

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

HTTP/1.1 502 Bad Gateway

इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

संभावित कारण

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

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

वजह ब्यौरा इनके लिए समस्या हल करने के निर्देश
जवाब में हेडर का साइज़, तय सीमा से ज़्यादा है किसी खास हेडर का साइज़ या टारगेट/बैकएंड सर्वर से Apigee Edge को एचटीटीपी रिस्पॉन्स के तौर पर भेजे गए सभी हेडर के साइज़ का योग, Apigee Edge में तय की गई सीमा से ज़्यादा है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए

गड़बड़ी का पता लगाने के सामान्य चरण

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

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

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

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

  3. विश्लेषण करें > एपीआई मॉनिटरिंग > जांच करें पेज पर जाएं.
  4. वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखीं.
  5. फ़ॉल्ट कोड को कम करने के लिए, प्रॉक्सी फ़िल्टर चुना जा सकता है.
  6. समय के हिसाब से गड़बड़ी का कोड प्लॉट करें.
  7. वह सेल चुनें जिसमें गड़बड़ी का कोड protocol.http.TooBigHeaders मौजूद है. यह कोड नीचे दिखाया गया है:

    ( बड़ी इमेज देखें)

  8. आपको गड़बड़ी के कोड protocol.http.TooBigHeaders के बारे में जानकारी दिखेगी. यह जानकारी यहां दिखाई गई है:

    ( बड़ी इमेज देखें)

  9. लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.

    ( बड़ी इमेज देखें)

  10. लॉग विंडो में, यह जानकारी नोट करें:
    • स्टेटस कोड: 502
    • गड़बड़ी का सोर्स: target
    • गड़बड़ी का कोड: protocol.http.TooBigHeaders.
  11. अगर गड़बड़ी का सोर्स की वैल्यू target है और गड़बड़ी का कोड की वैल्यू protocol.http.TooBigHeaders है, तो इसका मतलब है कि टारगेट/ बैकएंड सर्वर से मिले एचटीटीपी रिस्पॉन्स में ऐसे हेडर हैं जिनका साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है.

ट्रेस टूल

  1. ट्रेस सेशन चालू करें और इनमें से कोई एक विकल्प चुनें:
    1. 502 Bad Gateway गड़बड़ी होने का इंतज़ार करें या
    2. अगर आपको समस्या का पता चल गया है, तो एपीआई कॉल करें और 502 Bad Gateway गड़बड़ी को दोबारा ठीक करें.
  2. पूरे न हो पाने वाले किसी अनुरोध को चुनें और उसके ट्रेस की जांच करें.
  3. ट्रेस के अलग-अलग फ़ेज़ पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
  4. आम तौर पर, आपको यह गड़बड़ी Error नाम के फ़्लो में दिखेगी. यह गड़बड़ी, नीचे दिखाए गए तरीके से Request sent to target server फ़ेज़ के ठीक बाद दिखती है:

    ( बड़ी इमेज देखें)

    ट्रेस से गड़बड़ी की वैल्यू नोट करें:

    • गड़बड़ी: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    इससे पता चलता है कि Apigee Edge (मैसेज प्रोसेसर कॉम्पोनेंट) को जैसे ही बैकएंड सर्वर से जवाब मिलता है, वह गड़बड़ी दिखाता है. ऐसा इसलिए होता है, क्योंकि हेडर का साइज़, तय सीमा से ज़्यादा होता है.

  5. आपको Apigee Edge से भेजे गए गड़बड़ी के जवाब में, क्लाइंट को भेजा गया जवाब में गड़बड़ी दिखेगी. यह गड़बड़ी इस तरह दिखती है:

    ( बड़ी इमेज देखें)

  6. ट्रेस से गड़बड़ी की वैल्यू नोट करें. ऊपर दिए गए सैंपल ट्रेस में यह जानकारी दिखती है:
    • गड़बड़ी: 502 Bad Gateway.
    • गड़बड़ी वाला कॉन्टेंट: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. ट्रेस में AX (Analytics Data Recorded) फ़ेज़ पर जाएं और इससे जुड़ी जानकारी देखने के लिए, उस पर क्लिक करें.

    ( बड़ी इमेज देखें)

    इनकी वैल्यू नोट करें:

    गड़बड़ी वाले हेडर वैल्यू
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    गड़बड़ी का कॉन्टेंट: बॉडी {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

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

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

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

    यहां: ORG, ENV, और PORT# को असल वैल्यू से बदलें.

  3. खोजें कि क्या किसी खास अवधि के दौरान , गड़बड़ी कोड protocol.http.TooBigHeaders के साथ कोई 502 गड़बड़ी हुई है. अगर समस्या पहले हुई थी, तो यह भी देखें कि क्या अब भी 502 गड़बड़ी के साथ कोई अनुरोध पूरा नहीं हो पा रहा है.
  4. अगर आपको X-Apigee-fault-code की वैल्यू से मेल खाने वाली protocol.http.TooBigHeaders के साथ 502 गड़बड़ियां मिलती हैं, तो X-Apigee-fault-source की वैल्यू का पता लगाएं.

    NGINX के ऐक्सेस लॉग में मौजूद 502 गड़बड़ी का सैंपल:

    NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X-Apigee-fault-code और X-Apigee-fault-source के लिए ये वैल्यू दी गई हैं:

    गड़बड़ी वाले हेडर वैल्यू
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

वजह: जवाब में मौजूद हेडर का साइज़, तय सीमा से ज़्यादा है

संक्रमण की जांच

  1. एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके देखी गई गड़बड़ी के लिए, गड़बड़ी का कोड, गड़बड़ी का सोर्स, और जवाब के पेलोड का साइज़ तय करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है.
  2. अगर गड़बड़ी की वजह की वैल्यू target है, तो इसका मतलब है कि टारगेट/बैकएंड सर्वर ने Apigee को जो रिस्पॉन्स भेजा है उसके हेडर का साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है.
  3. इनमें से किसी एक तरीके का इस्तेमाल करके, यह पुष्टि की जा सकती है कि टारगेट/बैकएंड से मिले रिस्पॉन्स में ऐसे हेडर हैं जिनका साइज़, अनुमति वाली सीमा से ज़्यादा था:

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

    गड़बड़ी के मैसेज का इस्तेमाल करके पुष्टि करने के लिए:

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

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

    "faultstring":"response headers size exceeding 25,600"

    ऊपर दिए गए गड़बड़ी के मैसेज में, faultstringमें ध्यान दें कि जवाब में ऐसे हेडर हैं जिनका कुल साइज़, तय की गई सीमा से ज़्यादा है.

    असल अनुरोध

    असली अनुरोध का इस्तेमाल करके पुष्टि करने के लिए:

    अगर आपके पास टारगेट/बैकएंड सर्वर को किए गए असली अनुरोध का ऐक्सेस है, तो यह तरीका अपनाएं:

    1. अगर आप पब्लिक क्लाउड/प्राइवेट क्लाउड के उपयोगकर्ता हैं, तो सीधे बैकएंड सर्वर से अनुरोध करें. इसके लिए, बैकएंड सर्वर या किसी ऐसी मशीन का इस्तेमाल करें जिससे आपको बैकएंड सर्वर से अनुरोध करने की अनुमति मिली हो.
    2. अगर आप Private Cloud के उपयोगकर्ता हैं, तो मैसेज प्रोसेसर में से किसी एक से बैकएंड सर्वर को अनुरोध भी भेजा जा सकता है.
    3. बैकएंड सर्वर से मिले रिस्पॉन्स की जांच करें. साथ ही, रिस्पॉन्स में पास किए गए हेडर के कुल साइज़ का हिसाब लगाएं और उसकी पुष्टि करें.
    4. अगर आपको लगता है कि जवाब के पेलोड में मौजूद हेडर का साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है, तो यह समस्या की वजह हो सकती है.

      टारगेट सर्वर से मिला रिस्पॉन्स का उदाहरण:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      ऊपर दिए गए उदाहरण में, Testheader1 और Testheader2 का साइज़ बड़ा है. इस वजह से, यह गड़बड़ी हुई है, क्योंकि यह Apigee Edge में तय की गई सीमा से ज़्यादा है.

    मैसेज प्रोसेसर के लॉग

    मैसेज प्रोसेसर के लॉग का इस्तेमाल करके पुष्टि करने के लिए:

    अगर आप Private Cloud के उपयोगकर्ता हैं, तो मैसेज प्रोसेसर के लॉग का इस्तेमाल करके यह पुष्टि की जा सकती है कि रिस्पॉन्स हेडर का साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है या नहीं.

    1. मैसेज प्रोसेसर के लॉग देखें:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. खोजें कि क्या किसी खास समयावधि के दौरान 502 गड़बड़ियां हुई हैं (अगर समस्या पहले हुई थी) या क्या अब भी 502 गड़बड़ियों की वजह से अनुरोध पूरे नहीं हो पा रहे हैं. इस खोज स्ट्रिंग का इस्तेमाल किया जा सकता है:
      grep -ri "response headers size exceeding"
      
    3. आपको system.log से मिलती-जुलती लाइनें दिखेंगी. जैसे, यहां दी गई हैं. आपके मामले में, रिस्पॉन्स हेडर का साइज़ अलग-अलग हो सकता है:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. जैसे ही मैसेज प्रोसेसर को बैकएंड/टारगेट सर्वर से जवाब मिलता है और उसे पता चलता है कि हेडर का कुल साइज़ 25 केबी से ज़्यादा है, वह रुक जाता है और यह गड़बड़ी दिखाता है:

      response headers size exceeding 25,600

      इसका मतलब है कि टोटल हेडर साइज़ 25 केबी से ज़्यादा है. Apigee, 25 केबी की सीमा से ज़्यादा होने पर गड़बड़ी का मैसेज दिखाता है. गड़बड़ी का कोड protocol.http.TooBigHeaders होता है

रिज़ॉल्यूशन

साइज़ तय करना

पहला विकल्प [सुझाया गया]: टारगेट सर्वर ऐप्लिकेशन को ठीक करें, ताकि वह Apigee की तय सीमा से ज़्यादा साइज़ वाले हेडर न भेजे

  1. यह विश्लेषण करें कि टारगेट सर्वर, रिस्पॉन्स हेडर का साइज़ सीमाएं में तय की गई सीमा से ज़्यादा क्यों भेज रहा है.
  2. अगर आपको यह तरीका सही नहीं लगता, तो अपने बैकएंड सर्वर ऐप्लिकेशन में बदलाव करें, ताकि वह ऐसे रिस्पॉन्स हेडर भेजे जिनका साइज़, Apigee Edge में तय की गई सीमा से कम हो.
  3. देखें कि क्या हैडर की जानकारी को जवाब के मुख्य हिस्से के तौर पर भेजा जा सकता है.
  4. अगर हो सके, तो हेडर में शामिल की जाने वाली बड़ी जानकारी को जवाब के मुख्य हिस्से में भेजें. इससे यह पक्का होगा कि रिस्पॉन्स हेडर की सीमा से ज़्यादा जवाब नहीं दिए गए हैं.

CwC

दूसरा विकल्प : रिस्पॉन्स हेडर के साइज़ की सीमा बढ़ाने के लिए, CwC प्रॉपर्टी का इस्तेमाल करना

Apigee, CwC प्रॉपर्टी उपलब्ध कराता है. इससे रिस्पॉन्स हेडर के साइज़ की सीमा को बढ़ाया जा सकता है. ज़्यादा जानकारी के लिए, मैसेज प्रोसेसर के लिए सीमाएं कॉन्फ़िगर करना लेख पढ़ें

सीमाएं

Apigee को उम्मीद है कि क्लाइंट ऐप्लिकेशन और बैकएंड सर्वर, अनुमति दी गई सीमा से ज़्यादा साइज़ वाले हेडर नहीं भेजेंगे. अनुमति दी गई सीमा के बारे में, Apigee Edge की सीमाएं में अनुरोध/जवाब के हेडर के साइज़ के लिए बताया गया है.

  1. अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो अनुरोध और जवाब के हेडर के साइज़ की ज़्यादा से ज़्यादा सीमा वही होगी जो Apigee Edge की सीमाओं में, अनुरोध/जवाब के हेडर के साइज़ के लिए बताई गई है.
  2. अगर आप Private Cloud का इस्तेमाल करते हैं, तो हो सकता है कि आपने अनुरोध और जवाब के हेडर के साइज़ की डिफ़ॉल्ट मैक्सिमम लिमिट में बदलाव किया हो. हालांकि, ऐसा करने का सुझाव नहीं दिया जाता. मौजूदा सीमा की जांच कैसे करें में दिए गए निर्देशों का पालन करके, रिस्पॉन्स हेडर के ज़्यादा से ज़्यादा साइज़ की सीमा तय की जा सकती है.

मौजूदा सीमा कैसे देखें?

इस सेक्शन में बताया गया है कि मैसेज प्रोसेसर पर प्रॉपर्टी HTTPResponse.headers.limit को नई वैल्यू के साथ अपडेट किया गया है या नहीं, इसकी पुष्टि कैसे करें.

  1. मैसेज प्रोसेसर मशीन पर, HTTPResponse.headers.limit प्रॉपर्टी को /opt/apigee/edge-message-processor/conf डायरेक्ट्री में खोजें. इसके बाद, देखें कि नीचे दी गई इमेज में दिखाई गई वैल्यू सेट की गई है या नहीं:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. ऊपर दिए गए कमांड का सैंपल नतीजा यहां दिया गया है:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. ऊपर दिए गए उदाहरण में, ध्यान दें कि प्रॉपर्टी HTTPResponse.headers.limit को http.properties में 25k वैल्यू के साथ सेट किया गया है.

    इससे पता चलता है कि Private Cloud के लिए Apigee में कॉन्फ़िगर किए गए रिस्पॉन्स पेलोड के साइज़ की सीमा 25 केबी है.

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

डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है

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

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

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

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

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