502 गलत गेटवे - TOBigLine

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

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

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

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

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

HTTP/1.1 502 Bad Gateway

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

{
   "fault":{
      "faultstring":"response line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

संभावित कारण

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

इस गड़बड़ी की संभावित वजहों को देखने से पहले, हम रिस्पॉन्स-लाइन का मतलब और इसके साइज़ की जांच करने का तरीका समझते हैं.

रिस्पॉन्स-लाइन को समझना

आम तौर पर, एचटीटीपी रिस्पॉन्स में तीन हिस्से होते हैं:

  1. स्टेटस-लाइन (Apigee में इसे Response-Line कहा जाता है)
  2. ( HTTP हेडर का सेट )
  3. [ मुख्य भाग ]

रिस्पॉन्स-लाइन के तीन हिस्से होते हैं: प्रोटोकॉल का वर्शन, उसके बाद अंक वाला स्टेटस कोड और इससे जुड़े टेक्स्ट वाला वाक्यांश, जैसा कि नीचे दिखाया गया है:

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

जब टारगेट/बैकएंड सर्वर ऐप्लिकेशन से एचटीटीपी रिस्पॉन्स भेजा जाता है, तो भेजी जाने वाली पहली लाइन रिस्पॉन्स-लाइन को दिखाती है, जैसा कि ऊपर बताया गया है. इसके बाद, हेडर और रिस्पॉन्स का मुख्य हिस्सा/पेलोड शामिल होता है.इस सैंपल के तौर पर, curl का सामान्य अनुरोध, अनुरोध वाला हिस्सा, और रिस्पॉन्स वाला हिस्सा (रिस्पॉन्स-लाइन के साथ) दिखता है.

रिस्पॉन्स-लाइन के साइज़ को समझना

  1. ऊपर बताए गए सैंपल में, रिस्पॉन्स की स्टार्ट लाइन (पहली लाइन) इस तरह भी है. इसे रिस्पॉन्स-लाइन भी कहा जाता है:

    HTTP/1.1 200 OK
    

    इस रिस्पॉन्स-लाइन का साइज़ ~15 bytes जैसा है, क्योंकि इसमें 15 ASCII characters शामिल है. यह Apigee Edge में मंज़ूर की गई सीमा के अंदर है, इसलिए Apigee Edge से बिना किसी गड़बड़ी के क्लाइंट को जवाब भेज दिया जाता है.

  2. इसी तरह, अगर ऊपर दिखाए गए गड़बड़ी के मैसेज में faultstring को देखा जाए, तो उसमें "response line size exceeding 2,048" दिखेगा. इससे पता चलता है कि टारगेट/बैकएंड सर्वर से भेजे गए एचटीटीपी रिस्पॉन्स में रिस्पॉन्स-लाइन, 2,048 बाइट से ज़्यादा है.

बड़ी रिस्पॉन्स-लाइन को समझना

स्टेटस-लाइन (इसे यहां रिस्पॉन्स-लाइन कहा जाता है) और सामान्य एचटीटीपी अनुरोध और रिस्पॉन्स के हिसाब से, Apigee Edge में साइज़, डिफ़ॉल्ट के तौर पर तय की गई सीमा 2 K से काफ़ी कम होगा. इसलिए, हो सकता है कि हम इस सीमा को पूरा न करें. हालांकि, यहां कुछ ऐसे संभावित मामले दिए गए हैं जिनमें यह सीमा पार हो सकती है:

  1. टारगेट/बैकएंड सर्वर कोई एचटीटीपी सिस्टम नहीं है. ऐसा हो सकता है कि यह बिना एचटीटीपी रिस्पॉन्स के जवाब दे रहा हो.
  2. टारगेट/बैकएंड सर्वर में समस्याएं हैं और वह एचटीटीपी रिस्पॉन्स के तौर पर एक लंबी रिस्पॉन्स-लाइन भेजता है.

इसके बारे में ज़्यादा जानने के लिए, कनेक्शन की गड़बड़ी प्रोटोकॉल.http.TooBigLine, "रिस्पॉन्स लाइन का साइज़ 2,048 से ज़्यादा होना लेख में बताया गया है.

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

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

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

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

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

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

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

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

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

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

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

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

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

ट्रेस टूल

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

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

    • गड़बड़ी: response line exceeding 2,048
    • error.class: com.apigee.errors.http.server.BadGateway

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

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

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

  6. ट्रेस में से गड़बड़ी की वैल्यू को नोट करें:
    • गड़बड़ी: 502 Bad Gateway.
    • गड़बड़ी वाला कॉन्टेंट: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. ट्रेस में, AX (Analytics डेटा रिकॉर्ड किया गया) चरण पर भी जाया जा सकता है. साथ ही, गड़बड़ी की जानकारी देखने के लिए, उस पर क्लिक किया जा सकता है.

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

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

    अनुरोध के हेडर वैल्यू
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    गड़बड़ी का कॉन्टेंट : मुख्य हिस्सा {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

NGINX

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

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

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

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target

वजह: रिस्पॉन्स-लाइन का साइज़ तय सीमा से ज़्यादा है

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

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

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

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

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

    गड़बड़ी के मैसेज का सैंपल:

    "faultstring":"response line size exceeding 2,048"
    

    ऊपर दी गई faultstring से पता चलता है कि रिस्पॉन्स लाइन का साइज़ 2 केबी की तय सीमा से ज़्यादा है.

    वास्तविक अनुरोध

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

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

    1. पुष्टि करें कि जवाब देने के लिए दी गई लाइन का साइज़ कितना है
    2. अगर आपको लगता है कि यूआरआई का साइज़, Apigee Edge में दी गई अनुमति की सीमा से ज़्यादा है, तो ही समस्या की वजह है.

      टारगेट/बैकएंड सर्वर से मिला रिस्पॉन्स का सैंपल:

      curl -v http://HOSTALIAS/test
      
      *   Trying 3.2.1.4...
      * TCP_NODELAY set
      * Connected to <hostalias> (3.2.1.4) port 80 (#0)
      > GET /test HTTP/1.1
      > Host: HOSTALIAS
      > User-Agent: curl/7.64.1
      > Accept: */*
      >
      < HTTP/1.1 200 1111…<trimmed>...11111111
      < Date: Mon, 26 Jul 2021 07:07:18 GMT
      < Content-Type: application/json
      < Content-Length: 269
      < Connection: keep-alive
      < Server: gunicorn/19.9.0
      < Access-Control-Allow-Origin: *
      < Access-Control-Allow-Credentials: true
      <
      {
      <Response Body>
      }
      * Connection #0 to host <hostalias> left intact
      * Closing connection 0
      

      ऊपर दिए गए मामले में, रिस्पॉन्स-लाइन HTTP/1.1 200 1111…<trimmed>...11111111 का साइज़ 2 केबी से ज़्यादा है. इसका मतलब है कि इसमें दो केबी से ज़्यादा ASCII वर्ण हैं.

      अगर किसी दूसरे क्लाइंट का इस्तेमाल किया जा रहा है, तो आपके पास क्लाइंट लॉग की समीक्षा करने का विकल्प है. साथ ही, यह पता लगाने की कोशिश करें कि Apigee Edge को रिस्पॉन्स-लाइन कितनी बड़ी भेजी जा रही है.

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

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

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

    1. एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX के ऐक्सेस लॉग का इस्तेमाल करके, पूरे न हो पाने वाले अनुरोध का मैसेज आईडी पता करें. इसके बारे में सामान्य तरीके से जानकारी पाने के तरीके में बताया गया है.
    2. मैसेज प्रोसेसर लॉग में मैसेज आईडी खोजें:

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

    3. आपको system.log से मिलती-जुलती लाइनें दिखेंगी:

      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1
      NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() :
      ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592
      useCount=1 bytesRead=0 bytesWritten=201 age=144ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048
      at <snipped>
      
      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1
      messageid:r-5110240-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
      

      ऊपर दिए गए गड़बड़ी के मैसेज में message = response line size exceeding 2,048 टेक्स्ट से पता चलता है कि रिस्पॉन्स लाइन का साइज़ 2 केबी से ज़्यादा है. इसलिए, Apigee Edge, अपवाद को फेंकता है और क्लाइंट ऐप्लिकेशन को, गड़बड़ी के कोड protocol.http.TooBigline के साथ 502 स्टेटस कोड दिखाता है.

रिज़ॉल्यूशन

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

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

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

CwC

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

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

सीमाएं

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

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

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

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

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

    इससे पता चलता है कि Apigee for Private Cloud में, रिस्पॉन्स-लाइन साइज़ 2 केबी के लिए कॉन्फ़िगर किया जा सकता है.

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

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

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

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

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

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

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