फ़िलहाल, Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
पर जाएं
Apigee X दस्तावेज़. info
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को एपीआई कॉल के जवाब में, गड़बड़ी कोड
protocol.http.DuplicateHeader के साथ एचटीटीपी स्टेटस कोड 502 Bad Gatewayमिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
HTTP/1.1 502 Bad Gateway
इसके अलावा, आपको नीचे दिखाए गए गड़बड़ी के मैसेज जैसा कोई मैसेज दिख सकता है:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}ये वजहें हो सकती हैं
यह गड़बड़ी तब होती है, जब Apigee Edge में किसी खास एचटीटीपी हेडर को एक से ज़्यादा बार इस्तेमाल किया जाता है. ऐसा तब होता है, जब बैकएंड सर्वर से Apigee Edge को भेजे गए एचटीटीपी रिस्पॉन्स में, एक ही या अलग-अलग वैल्यू के साथ एक से ज़्यादा बार इस्तेमाल किया जाता है.
RFC 7230, सेक्शन 3.2.2: फ़ील्ड का क्रम, किसी मैसेज में एक ही नाम वाले कई हेडर
फ़ील्ड नहीं होने चाहिए.हालांकि, ऐसा तब किया जा सकता है, जब उस
हेडर फ़ील्ड की पूरी वैल्यू को कॉमा लगाकर अलग की गई लिस्ट के तौर पर तय किया गया हो. [जैसे, #(वैल्यू)] या हेडर फ़ील्ड, जानी-मानी गड़बड़ी हो. अगर Apigee Edge को पता चलता है कि टारगेट/बैकएंड सर्वर से भेजे गए एचटीटीपी रिस्पॉन्स में, एक ही हेडर को एक से ज़्यादा बार भेजा गया है, तो वह 502 Bad Gateway और गड़बड़ी कोड protocol.http.DuplicateHeader के साथ जवाब देता है.
इस गड़बड़ी की ये वजहें हो सकती हैं:
| वजह | ब्यौरा | इनके लिए समस्या हल करने के निर्देश लागू होते हैं |
|---|---|---|
| रिस्पॉन्स में डुप्लीकेट हेडर | बैकएंड सर्वर से मिले रिस्पॉन्स में डुप्लीकेट हेडर हैं. | Edge Public और Private Cloud के उपयोगकर्ता |
गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण
इस गड़बड़ी की जानकारी इकट्ठा करने के लिए, इनमें से कोई एक टूल/तकनीक इस्तेमाल करें:
एपीआई की परफ़ॉर्मेंस मॉनिटर करना
एपीआई की परफ़ॉर्मेंस मॉनिटर करने की सुविधा का इस्तेमाल करके, गड़बड़ी की जानकारी इकट्ठा करने के लिए:
- ज़रूरी भूमिका वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें.
उस संगठन पर स्विच करें जिसमें आपको समस्या की जांच करनी है.

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

- पूरे न हो पाने वाले किसी एक अनुरोध को चुनें और ट्रेस की जांच करें.
- ट्रेस के अलग-अलग चरणों पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
आम तौर पर, आपको गड़बड़ी, टारगेट को भेजा गया अनुरोध सर्वर चरण के बाद वाले फ़्लो में दिखेगी. जैसे, यहां दिखाया गया है:

ट्रेस से गड़बड़ी की वैल्यू नोट करें.
ऊपर दिए गए ट्रेस के नमूने में, गड़बड़ी
Duplicate Header "Expires"के तौर पर दिखती है. चूंकि, गड़बड़ी Apigee ने तब दिखाई, जब अनुरोध को बैकएंड सर्वर पर भेजा गया था. इससे पता चलता है कि बैकएंड सर्वर नेExpiresहेडर को एक से ज़्यादा बार भेजा.- ट्रेस में AX (रिकॉर्ड किया गया Analytics डेटा) चरण पर जाएं और उस पर क्लिक करें.
स्क्रोल करके चरण की जानकारी - रिस्पॉन्स हेडर सेक्शन पर जाएं और X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू देखें. जैसे, यहां दिखाया गया है:

- आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू,
protocol.http.DuplicateHeaderऔरtargetदिखेंगी. इससे पता चलता है कि यह गड़बड़ी इसलिए हुई, क्योंकि बैकएंड सर्वर ने रिस्पॉन्स हेडरExpiresके लिए डुप्लीकेट हेडर पास किए थे.रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target देखें कि प्रॉक्सी चेनिंग का इस्तेमाल किया जा रहा है या नहीं; इसका मतलब है कि टारगेट सर्वर या टारगेट एंडपॉइंट, Apigee में किसी दूसरी प्रॉक्सी को कॉल कर रहा है या नहीं.
यह पता करने के लिए, टारगेट सर्वर को भेजा गया अनुरोध चरण पर वापस जाएं. Curl दिखाएं पर क्लिक करें.
टारगेट सर्वर को भेजे गए अनुरोध के लिए Curl विंडो खुलती है. इससे टारगेट सर्वर के होस्ट एलियास का पता लगाया जा सकता है.
- अगर टारगेट सर्वर का होस्ट एलियास, वर्चुअल होस्ट एलियास की ओर इशारा कर रहा है, तो यह प्रॉक्सी
चेनिंग है. इस मामले में, आपको चेनिंग वाली प्रॉक्सी के लिए ऊपर दिए गए सभी चरण तब तक दोहराने होंगे, जब तक
आपको यह पता न चल जाए कि
502 Bad Gatewayगड़बड़ी की असल वजह क्या है. - अगर टारगेट सर्वर का होस्ट एलियास, आपके बैकएंड सर्वर की ओर इशारा करता है, तो इसका मतलब है कि आपका बैकएंड सर्वर, Apigee को रिस्पॉन्स में डुप्लीकेट हेडर भेज रहा है.
NGINX
NGINX के ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी की जानकारी इकट्ठा करने के लिए:
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो एचटीटीपी
502गड़बड़ियों के बारे में अहम जानकारी पाने के लिए, NGINX के ऐक्सेस लॉग का इस्तेमाल किया जा सकता है. NGINX के ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logयहां: ORG, ENV, और PORT# को असल वैल्यू से बदल दिया जाता है.
- देखें कि किसी खास समयावधि के दौरान (अगर समस्या पहले हुई थी) कोई
502गड़बड़ी हुई है या नहीं. साथ ही, देखें कि अब भी कोई अनुरोध502गड़बड़ी के साथ पूरा नहीं हो पा रहा है या नहीं. अगर आपको X-Apigee-fault-code के साथ कोई
502गड़बड़ी दिखती है और इसकी वैल्यूprotocol.http.DuplicateHeaderसे मेल खाती है, तो X-Apigee-fault-source की वैल्यू देखें.NGINX के ऐक्सेस लॉग से मिली 502 गड़बड़ी का नमूना:
NGINX के ऐक्सेस लॉग की ऊपर दी गई एंट्री में, X- Apigee-fault-code और X-Apigee-fault-source: के लिए ये वैल्यू दी गई हैं:
रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target
वजह: रिस्पॉन्स में डुप्लीकेट हेडर
गड़बड़ी की जानकारी इकट्ठा करना
- एपीआई की परफ़ॉर्मेंस मॉनिटर करने की सुविधा या NGINX के ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी के लिए गड़बड़ी कोड और गड़बड़ी का सोर्स पता करें. इसके लिए, गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण में बताया गया तरीका अपनाएं.
- अगर गड़बड़ी का सोर्स की वैल्यू
targetहै, तो इसका मतलब है कि टारगेट सर्वर से मिले रिस्पॉन्स में डुप्लीकेट हेडर हैं. यह पता करने के लिए कि रिस्पॉन्स के हिस्से के तौर पर, कौनसे हेडर को एक से ज़्यादा बार भेजा गया है, इनमें से कोई एक तरीका अपनाएं:
गड़बड़ी का मैसेज
गड़बड़ी के मैसेज का इस्तेमाल करके:
अगर आपके पास Apigee Edge से मिले गड़बड़ी के पूरे मैसेज का ऐक्सेस है, तो
faultstringदेखें.faultstringमें उस हेडर का नाम होता है जिसे एक से ज़्यादा बार भेजा गया है.गड़बड़ी के मैसेज का नमूना:
"faultstring":"Duplicate Header \"Expires\""
- ऊपर दिए गए गड़बड़ी के मैसेज में, देखा जा सकता है कि हेडर
Expiresकोfaultstringमें एक से ज़्यादा बार भेजा गया है.
असल अनुरोध
असल अनुरोध का इस्तेमाल करके:
- अगर आपके पास टारगेट सर्वर को किए गए असल अनुरोध का ऐक्सेस नहीं है, तो ट्रेस टूल का इस्तेमाल करके चरण 10.a और चरण 10.b से, उससे जुड़ा
curlकमांड पाएं. अगर आपके पास टारगेट सर्वर ऐप्लिकेशन को किए गए असल अनुरोध का ऐक्सेस है, तो यह तरीका अपनाएं:
टारगेट सर्वर को कॉल करें.
इस उदाहरण में इस्तेमाल किए गए टारगेट सर्वर के लिए अनुरोध का नमूना:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
रिस्पॉन्स में दिखने वाले हेडर की सूची की पुष्टि करें.
इस उदाहरण में इस्तेमाल किए गए टारगेट सर्वर से मिले रिस्पॉन्स का नमूना:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
ऊपर दिए गए अनुरोध के उदाहरण में, हेडर
Expiresको एक से ज़्यादा बार भेजा गया है. इसलिए, यह अनुरोध502 Bad Gatewayगड़बड़ी और गड़बड़ी कोड:protocol.http.DuplicateHeaderके साथ पूरा नहीं हो पाता.अगर
faultstringमें दिखने वाला हेडर, बैकएंड सर्वर के रिस्पॉन्स में एक से ज़्यादा बार दिखता है, तो यह गड़बड़ी की वजह है. ऊपर दिए गए मामले में, हेडरExpiresको एक से ज़्यादा बार भेजा गया है.
रिज़ॉल्यूशन
डुप्लीकेट होने की समस्या ठीक करना
पहला विकल्प [सुझाया गया विकल्प]: बैकएंड सर्वर को ठीक करें, ताकि वह डुप्लीकेट हेडर शामिल न करे
- इसकी वजह का विश्लेषण करें कि खास बैकएंड सर्वर, डुप्लीकेट हेडर
Expiresक्यों भेज रहा है. साथ ही, पुष्टि करें कि एपीआई प्रॉक्सी के लिए इसे स्वीकार करना ठीक है या नहीं. ज़्यादातर मामलों में, यह एचटीटीपी के नियम RFC7230 के मुताबिक सही नहीं होगा. - अगर यह सही नहीं है, तो अपने टारगेट सर्वर ऐप्लिकेशन में बदलाव करें, ताकि वह डुप्लीकेट हेडर न भेजे.
ऊपर दिए गए उदाहरण में, यह देखा गया है कि हेडर
Expiresको एक ही वैल्यू के साथ दो बार भेजा गया है, जो सही नहीं है. इस समस्या को ठीक करने के लिए, पक्का करें कि टारगेट सर्वर,Expiresहेडर को सिर्फ़ एक बार पास करे. - अगर यह सही है और आपको डुप्लीकेट हेडर की अनुमति देनी है, तो CwC प्रॉपर्टी का इस्तेमाल करके दूसरा विकल्प देखें.
CwC
दूसरा विकल्प: CwC प्रॉपर्टी का इस्तेमाल करना
Apigee, CwC प्रॉपर्टी
HTTPHeader.<HeaderName> उपलब्ध कराता है. इसकी मदद से, क्लाइंट ऐप्लिकेशन और टारगेट
सर्वर, Apigee Edge में एपीआई प्रॉक्सी को डुप्लीकेट हेडर भेज सकते हैं.
| CwC प्रॉपर्टी | वैल्यू |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
उदाहरण के लिए, मैसेज प्रोसेसर पर यह प्रॉपर्टी सेट की जा सकती है, ताकि डुप्लीकेट
और हेडर Expires के लिए एक से ज़्यादा वैल्यू की अनुमति दी जा सके.
HTTPHeader.Expires=allowDuplicates, multiValued
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो प्रॉपर्टी को कॉन्फ़िगर करके, Apigee
Edge को
502 Bad Gatewayगड़बड़ी दिखाने से रोका जा सकता है. भले ही, अनुरोध में डुप्लीकेट हेडर शामिल हों. इसके लिए, डुप्लीकेट हेडर इस्तेमाल करने के लिए मैसेज प्रोसेसर को कॉन्फ़िगर करना लेख में दिया गया तरीका अपनाएं. - अगर आप Public Cloud के उपयोगकर्ता हैं, तो अपने संगठन के लिए इस प्रॉपर्टी को कॉन्फ़िगर करने के लिए, Apigee Edge की सहायता टीम से संपर्क करें.
खास जानकारी
Apigee, 502 Bad Gateway गड़बड़ी का रिस्पॉन्स देता है, क्योंकि उसे उम्मीद होती है कि
बैकएंड सर्वर, आरएफ़सी की इन खास जानकारी के मुताबिक काम करेगा:
| खास जानकारी |
|---|
| आरएफ़सी 7230, सेक्शन 3.2.2: फ़ील्ड का क्रम |
| आरएफ़सी 7230, सेक्शन 3.2: हेडर फ़ील्ड |
अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना लेख पर जाएं.
गड़बड़ी की जानकारी इकट्ठा करना
गड़बड़ी की यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.
अगर आप Public Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
502गड़बड़ी को फिर से दोहराने के लिए इस्तेमाल किया गया पूराcurlकमांड- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
अगर आप Private Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:
- पूरे न हो पाने वाले अनुरोधों के लिए दिखने वाला गड़बड़ी का पूरा मैसेज
- परिवेश का नाम
- एपीआई प्रॉक्सी बंडल
- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
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