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 के लिए टारगेट/बैकएंड सर्वर HTTP रिस्पॉन्स के हिस्से के तौर पर एज अधिकतम सीमा से ज़्यादा है Apigee Edge में सीमा तय करना.

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

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

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

  1. स्टेटस-लाइन (Apigee में इसे रिस्पॉन्स-लाइन कहा जाता है)
  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" है. इससे पता चलता है कि एचटीटीपी रिस्पॉन्स में Response-Line टारगेट/बैकएंड सर्वर से भेजी गई फ़ाइल का साइज़ 2,048 बाइट से ज़्यादा है.

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

इसकी परिभाषा के मुताबिक स्टेटस-लाइन (इसे यहां रिस्पॉन्स-लाइन कहा जाता है) और सामान्य एचटीटीपी अनुरोध और रिस्पॉन्स के हिसाब से, साइज़ Apigee Edge में दो 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 और Fault है कोड की वैल्यू 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. अगर आप निजी 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.TooBigLine से मिलान करें, फिर तय करें X-Apigee-fault-source. की वैल्यू है.

    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. एक का इस्तेमाल करके, यह पुष्टि की जा सकती है कि रिस्पॉन्स लाइन का साइज़, 2 केबी की तय सीमा से ज़्यादा हो गया है नीचे दिए गए तरीकों का इस्तेमाल करें:

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

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

    अगर आपके पास 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 केबी से ज़्यादा है, इसका मतलब है कि इसमें यह शामिल है 2 K से ज़्यादा ASCII वर्ण होने चाहिए.

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

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

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

    अगर आप निजी क्लाउड उपयोगकर्ता हैं, तो मैसेज प्रोसेसर के लॉग का इस्तेमाल इन कामों के लिए किया जा सकता है पुष्टि करें कि रिस्पॉन्स-लाइन का साइज़, 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, अपवाद के साथ 502 स्टेटस कोड दिखाता है क्लाइंट ऐप्लिकेशन के लिए protocol.http.TooBigline गड़बड़ी कोड.

रिज़ॉल्यूशन

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

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

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

CwC

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

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

सीमाएं

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

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

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

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

  1. मैसेज प्रोसेसर मशीन पर, प्रॉपर्टी खोजें HTTPResponse.line.limit /opt/apigee/edge-message-processor/conf डायरेक्ट्री और इसे चुनें नीचे दिखाए गए तरीके से देखें कि कौनसा मान सेट किया गया है:
    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 में, रिस्पॉन्स-लाइन के साइज़ की सीमा कॉन्फ़िगर की गई है क्लाउड का साइज़ 2 केबी है.

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

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

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

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

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

अगर आप निजी 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