502 गलत गेटवे - TOBigHeaders

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

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

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

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

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

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 के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

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

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

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

  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. आम तौर पर, आपको यह गड़बड़ी गड़बड़ी नाम के फ़्लो में दिखेगी. यह गड़बड़ी, टारगेट सर्वर को भेजा गया अनुरोध के ठीक बाद दिखती है, जैसा कि यहां दिखाया गया है:

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

    ट्रेस में से गड़बड़ी के मानों को नोट करें:

    • गड़बड़ी: 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 डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उससे जुड़ी जानकारी देखने के लिए, उस पर क्लिक करें.

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

    यहां दी गई वैल्यू पर ध्यान दें:

    गड़बड़ी वाले हेडर वैल्यू
    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. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो एचटीटीपी 502 Bad Gateway के बारे में अहम जानकारी तय करने के लिए, NGINX ऐक्सेस लॉग का इस्तेमाल किया जा सकता है.
  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 की वैल्यू, X-Apigee-fault-code से मेल खाने वाली कोई 502 गड़बड़ी मिलती है, तो X-Apigee-fault-code की वैल्यू तय करें.

    NGINX ऐक्सेस लॉग से 502 गड़बड़ी का नमूना:

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

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

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

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

    अगर आप Private Cloud के उपयोगकर्ता हैं, तो Message प्रोसेसर लॉग का इस्तेमाल करके यह पुष्टि की जा सकती है कि रिस्पॉन्स हेडर का साइज़, 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 केबी से ज़्यादा है और जब साइज़ 25 केबी की सीमा से ज़्यादा होता है, तब Apigee गड़बड़ी दिखाता है. गड़बड़ी का कोड protocol.http.TooBigHeaders होता है

रिज़ॉल्यूशन

साइज़ ठीक करें

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

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

CwC

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

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

सीमाएं

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

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

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

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

  1. Message प्रोसेसर मशीन पर, /opt/apigee/edge-message-processor/conf डायरेक्ट्री में HTTPResponse.headers.limit प्रॉपर्टी खोजें और देखें कि कौनसा वैल्यू सेट की गई है, जैसा कि नीचे दिखाया गया है:
    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 वैल्यू के साथ सेट किया गया है.

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

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

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

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी यह जानकारी इकट्ठा करें और Apigee Edge की सहायता टीम से संपर्क करें:

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

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

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

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