आपको 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 के उपयोगकर्ताओं के लिए |
गड़बड़ी का पता लगाने के सामान्य चरण
इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
एपीआई मॉनिटरिंग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें. इसके लिए, आपके पास सही भूमिका होनी चाहिए.
उस संगठन पर स्विच करें जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण करें > एपीआई मॉनिटरिंग > जांच करें पेज पर जाएं.
- वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखीं.
- फ़ॉल्ट कोड को कम करने के लिए, प्रॉक्सी फ़िल्टर चुना जा सकता है.
- समय के हिसाब से गड़बड़ी का कोड प्लॉट करें.
वह सेल चुनें जिसमें गड़बड़ी का कोड
protocol.http.TooBigHeadersमौजूद है. यह कोड नीचे दिखाया गया है:
आपको गड़बड़ी के कोड
protocol.http.TooBigHeadersके बारे में जानकारी दिखेगी. यह जानकारी यहां दिखाई गई है:
लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.
- लॉग विंडो में, यह जानकारी नोट करें:
- स्टेटस कोड:
502 - गड़बड़ी का सोर्स:
target - गड़बड़ी का कोड:
protocol.http.TooBigHeaders.
- स्टेटस कोड:
- अगर गड़बड़ी का सोर्स की वैल्यू
targetहै और गड़बड़ी का कोड की वैल्यूprotocol.http.TooBigHeadersहै, तो इसका मतलब है कि टारगेट/ बैकएंड सर्वर से मिले एचटीटीपी रिस्पॉन्स में ऐसे हेडर हैं जिनका साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है.
ट्रेस टूल
- ट्रेस सेशन चालू करें
और इनमें से कोई एक विकल्प चुनें:
502 Bad Gatewayगड़बड़ी होने का इंतज़ार करें या- अगर आपको समस्या का पता चल गया है, तो एपीआई कॉल करें और
502 Bad Gatewayगड़बड़ी को दोबारा ठीक करें.
- पूरे न हो पाने वाले किसी अनुरोध को चुनें और उसके ट्रेस की जांच करें.
- ट्रेस के अलग-अलग फ़ेज़ पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
आम तौर पर, आपको यह गड़बड़ी Error नाम के फ़्लो में दिखेगी. यह गड़बड़ी, नीचे दिखाए गए तरीके से Request sent to target server फ़ेज़ के ठीक बाद दिखती है:
ट्रेस से गड़बड़ी की वैल्यू नोट करें:
- गड़बड़ी:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
इससे पता चलता है कि Apigee Edge (मैसेज प्रोसेसर कॉम्पोनेंट) को जैसे ही बैकएंड सर्वर से जवाब मिलता है, वह गड़बड़ी दिखाता है. ऐसा इसलिए होता है, क्योंकि हेडर का साइज़, तय सीमा से ज़्यादा होता है.
- गड़बड़ी:
आपको Apigee Edge से भेजे गए गड़बड़ी के जवाब में, क्लाइंट को भेजा गया जवाब में गड़बड़ी दिखेगी. यह गड़बड़ी इस तरह दिखती है:
- ट्रेस से गड़बड़ी की वैल्यू नोट करें. ऊपर दिए गए सैंपल ट्रेस में यह जानकारी दिखती है:
- गड़बड़ी:
502 Bad Gateway. - गड़बड़ी वाला कॉन्टेंट:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- गड़बड़ी:
ट्रेस में AX (Analytics Data Recorded) फ़ेज़ पर जाएं और इससे जुड़ी जानकारी देखने के लिए, उस पर क्लिक करें.
इनकी वैल्यू नोट करें:
गड़बड़ी वाले हेडर वैल्यू X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetगड़बड़ी का कॉन्टेंट: बॉडी {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो NGINX के ऐक्सेस लॉग का इस्तेमाल करके, एचटीटीपी
502 Bad Gatewayके बारे में अहम जानकारी पाई जा सकती है. NGINX के ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logयहां: ORG, ENV, और PORT# को असल वैल्यू से बदलें.
- खोजें कि क्या किसी खास अवधि के दौरान
, गड़बड़ी कोड
protocol.http.TooBigHeadersके साथ कोई502गड़बड़ी हुई है. अगर समस्या पहले हुई थी, तो यह भी देखें कि क्या अब भी502गड़बड़ी के साथ कोई अनुरोध पूरा नहीं हो पा रहा है. अगर आपको 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.TooBigHeadersX-Apigee-fault-source target
वजह: जवाब में मौजूद हेडर का साइज़, तय सीमा से ज़्यादा है
संक्रमण की जांच
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके देखी गई गड़बड़ी के लिए, गड़बड़ी का कोड, गड़बड़ी का सोर्स, और जवाब के पेलोड का साइज़ तय करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है.
- अगर गड़बड़ी की वजह की वैल्यू
targetहै, तो इसका मतलब है कि टारगेट/बैकएंड सर्वर ने Apigee को जो रिस्पॉन्स भेजा है उसके हेडर का साइज़, Apigee Edge में तय की गई सीमा से ज़्यादा है. - इनमें से किसी एक तरीके का इस्तेमाल करके, यह पुष्टि की जा सकती है कि टारगेट/बैकएंड से मिले रिस्पॉन्स में ऐसे हेडर हैं जिनका साइज़, अनुमति वाली सीमा से ज़्यादा था:
गड़बड़ी का मैसेज
गड़बड़ी के मैसेज का इस्तेमाल करके पुष्टि करने के लिए:
अगर आपके पास Apigee Edge से मिला पूरा गड़बड़ी का मैसेज है, तो
faultstringदेखें.faultstringका मतलब है कि रिस्पॉन्स हेडर का साइज़, तय सीमा से ज़्यादा है.गड़बड़ी के मैसेज का उदाहरण:
"faultstring":"response headers size exceeding 25,600"
ऊपर दिए गए गड़बड़ी के मैसेज में,
faultstringमें ध्यान दें कि जवाब में ऐसे हेडर हैं जिनका कुल साइज़, तय की गई सीमा से ज़्यादा है.असल अनुरोध
असली अनुरोध का इस्तेमाल करके पुष्टि करने के लिए:
अगर आपके पास टारगेट/बैकएंड सर्वर को किए गए असली अनुरोध का ऐक्सेस है, तो यह तरीका अपनाएं:
- अगर आप पब्लिक क्लाउड/प्राइवेट क्लाउड के उपयोगकर्ता हैं, तो सीधे बैकएंड सर्वर से अनुरोध करें. इसके लिए, बैकएंड सर्वर या किसी ऐसी मशीन का इस्तेमाल करें जिससे आपको बैकएंड सर्वर से अनुरोध करने की अनुमति मिली हो.
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो मैसेज प्रोसेसर में से किसी एक से बैकएंड सर्वर को अनुरोध भी भेजा जा सकता है.
- बैकएंड सर्वर से मिले रिस्पॉन्स की जांच करें. साथ ही, रिस्पॉन्स में पास किए गए हेडर के कुल साइज़ का हिसाब लगाएं और उसकी पुष्टि करें.
अगर आपको लगता है कि जवाब के पेलोड में मौजूद हेडर का साइज़, 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 में तय की गई सीमा से ज़्यादा है या नहीं.
मैसेज प्रोसेसर के लॉग देखें:
/opt/apigee/var/log/edge-message-processor/logs/system.log- खोजें कि क्या किसी खास समयावधि के दौरान
502गड़बड़ियां हुई हैं (अगर समस्या पहले हुई थी) या क्या अब भी502गड़बड़ियों की वजह से अनुरोध पूरे नहीं हो पा रहे हैं. इस खोज स्ट्रिंग का इस्तेमाल किया जा सकता है:grep -ri "response headers size exceeding"
- आपको
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)
-
जैसे ही मैसेज प्रोसेसर को बैकएंड/टारगेट सर्वर से जवाब मिलता है और उसे पता चलता है कि हेडर का कुल साइज़ 25 केबी से ज़्यादा है, वह रुक जाता है और यह गड़बड़ी दिखाता है:
response headers size exceeding 25,600इसका मतलब है कि टोटल हेडर साइज़ 25 केबी से ज़्यादा है. Apigee, 25 केबी की सीमा से ज़्यादा होने पर गड़बड़ी का मैसेज दिखाता है. गड़बड़ी का कोड
protocol.http.TooBigHeadersहोता है
रिज़ॉल्यूशन
साइज़ तय करना
पहला विकल्प [सुझाया गया]: टारगेट सर्वर ऐप्लिकेशन को ठीक करें, ताकि वह Apigee की तय सीमा से ज़्यादा साइज़ वाले हेडर न भेजे
- यह विश्लेषण करें कि टारगेट सर्वर, रिस्पॉन्स हेडर का साइज़ सीमाएं में तय की गई सीमा से ज़्यादा क्यों भेज रहा है.
- अगर आपको यह तरीका सही नहीं लगता, तो अपने बैकएंड सर्वर ऐप्लिकेशन में बदलाव करें, ताकि वह ऐसे रिस्पॉन्स हेडर भेजे जिनका साइज़, Apigee Edge में तय की गई सीमा से कम हो.
- देखें कि क्या हैडर की जानकारी को जवाब के मुख्य हिस्से के तौर पर भेजा जा सकता है.
- अगर हो सके, तो हेडर में शामिल की जाने वाली बड़ी जानकारी को जवाब के मुख्य हिस्से में भेजें. इससे यह पक्का होगा कि रिस्पॉन्स हेडर की सीमा से ज़्यादा जवाब नहीं दिए गए हैं.
CwC
दूसरा विकल्प : रिस्पॉन्स हेडर के साइज़ की सीमा बढ़ाने के लिए, CwC प्रॉपर्टी का इस्तेमाल करना
Apigee, CwC प्रॉपर्टी उपलब्ध कराता है. इससे रिस्पॉन्स हेडर के साइज़ की सीमा को बढ़ाया जा सकता है. ज़्यादा जानकारी के लिए, मैसेज प्रोसेसर के लिए सीमाएं कॉन्फ़िगर करना लेख पढ़ें
सीमाएं
Apigee को उम्मीद है कि क्लाइंट ऐप्लिकेशन और बैकएंड सर्वर, अनुमति दी गई सीमा से ज़्यादा साइज़ वाले हेडर नहीं भेजेंगे. अनुमति दी गई सीमा के बारे में, Apigee Edge की सीमाएं में अनुरोध/जवाब के हेडर के साइज़ के लिए बताया गया है.
- अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो अनुरोध और जवाब के हेडर के साइज़ की ज़्यादा से ज़्यादा सीमा वही होगी जो Apigee Edge की सीमाओं में, अनुरोध/जवाब के हेडर के साइज़ के लिए बताई गई है.
- अगर आप Private Cloud का इस्तेमाल करते हैं, तो हो सकता है कि आपने अनुरोध और जवाब के हेडर के साइज़ की डिफ़ॉल्ट मैक्सिमम लिमिट में बदलाव किया हो. हालांकि, ऐसा करने का सुझाव नहीं दिया जाता. मौजूदा सीमा की जांच कैसे करें में दिए गए निर्देशों का पालन करके, रिस्पॉन्स हेडर के ज़्यादा से ज़्यादा साइज़ की सीमा तय की जा सकती है.
मौजूदा सीमा कैसे देखें?
इस सेक्शन में बताया गया है कि मैसेज प्रोसेसर पर प्रॉपर्टी HTTPResponse.headers.limit को नई वैल्यू के साथ अपडेट किया गया है या नहीं, इसकी पुष्टि कैसे करें.
- मैसेज प्रोसेसर मशीन पर,
HTTPResponse.headers.limitप्रॉपर्टी को/opt/apigee/edge-message-processor/confडायरेक्ट्री में खोजें. इसके बाद, देखें कि नीचे दी गई इमेज में दिखाई गई वैल्यू सेट की गई है या नहीं:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- ऊपर दिए गए कमांड का सैंपल नतीजा यहां दिया गया है:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
ऊपर दिए गए उदाहरण में, ध्यान दें कि प्रॉपर्टी
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