आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
समस्या का ब्यौरा
एपीआई कॉल के जवाब में, क्लाइंट ऐप्लिकेशन को गड़बड़ी वाले कोड protocol.http.Response405WithoutAllowHeader के साथ 502 Bad Gateway एचटीटीपी स्टेटस कोड मिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
HTTP/1.1 502 Bad Gateway
इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}संभावित कारण
यह गड़बड़ी तब होती है, जब बैकएंड सर्वर, Allow हेडर के बिना 405 Method Not Allowed स्टेटस कोड के साथ जवाब देता है.
स्पेसिफ़िकेशन
आरएफ़सी 7231, सेक्शन 6.5.5: 405 Method Not Allowed के मुताबिक, यह ज़रूरी है कि मूल सर्वर, 405 रिस्पॉन्स में Allow हेडर फ़ील्ड जनरेट करे और भेजे. इस रिस्पॉन्स में, टारगेट रिसॉर्स के लिए फ़िलहाल काम करने वाले तरीकों की सूची शामिल होनी चाहिए. अगर ऐसा नहीं होता है, तो Apigee, 502 Bad Gateway और गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader के साथ जवाब देता है.
| वजह | ब्यौरा | इनके लिए समस्या हल करने के निर्देश |
|---|---|---|
| बैकएंड सर्वर से, Allow हेडर के बिना 405 रिस्पॉन्स मिला | एपीआई अनुरोध को प्रोसेस करने वाला बैकएंड सर्वर, Allow हेडर के बिना 405 स्टेटस कोड के साथ जवाब देता है. |
Edge Public और Private Cloud के उपयोगकर्ताओं के लिए |
गड़बड़ी का पता लगाने के सामान्य चरण
इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
एपीआई मॉनिटरिंग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- Edge UI में, ज़रूरी भूमिका वाले उपयोगकर्ता के तौर पर लॉग इन करें.
उस संगठन पर स्विच करें जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण करें > एपीआई मॉनिटरिंग > जांच करें पेज पर जाएं.
- वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखीं.
समय के हिसाब से गड़बड़ी का कोड प्लॉट करें.
उस सेल को चुनें जिसमें गड़बड़ी का कोड
protocol.http.Response405WithoutAllowHeaderमौजूद है. इसे नीचे दिखाया गया है:
गड़बड़ी कोड
protocol.http.Response405WithoutAllowHeaderके बारे में जानकारी, यहां दिखाई गई है:
ज़्यादा जानकारी देखने के लिए, लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले किसी अनुरोध को बड़ा करें.
- लॉग विंडो में, यह जानकारी नोट करें:
- स्टेटस कोड:
502 - गड़बड़ी का सोर्स:
target - गड़बड़ी का कोड:
protocol.http.Response405WithoutAllowHeader.
- स्टेटस कोड:
- अगर गड़बड़ी का सोर्स
targetहै और गड़बड़ी का कोडprotocol.http.Response405WithoutAllowHeaderहै, तो इसका मतलब है कि बैकएंड सर्वर नेAllowहेडर के बिना405 Method Not Allowedस्टेटस कोड के साथ जवाब दिया है.
ट्रेस टूल
ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
-
ट्रेस सेशन और इनमें से कोई एक सुविधा चालू करें:
502 Bad Gatewayगड़बड़ी होने का इंतज़ार करें या- अगर आपको समस्या का पता चल गया है, तो समस्या को फिर से ठीक करने के लिए एपीआई कॉल करें -
502 Bad Gatewayगड़बड़ी
पक्का करें कि Show all FlowInfos चालू हो:
- पूरे न हो पाने वाले किसी अनुरोध को चुनें और उसके ट्रेस की जांच करें.
- ट्रेस के अलग-अलग फ़ेज़ पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
आपको गड़बड़ी आम तौर पर, टारगेट सर्वर को अनुरोध भेजा गया फ़ेज़ के बाद दिखती है. जैसा कि यहां दिखाया गया है:
ट्रेस से गड़बड़ी की वैल्यू नोट करें.
ऊपर दिए गए सैंपल ट्रेस में, गड़बड़ी को
Received 405 Response without Allow Headerके तौर पर दिखाया गया है. अनुरोध को बैकएंड सर्वर पर भेजने के बाद, Apigee ने यह गड़बड़ी की है. इससे पता चलता है कि बैकएंड सर्वर नेAllowहेडर के बिना405रिस्पॉन्स स्टेटस कोड भेजा है.- ट्रेस में AX (Analytics Data Recorded) फ़ेज़ पर जाएं और उस पर क्लिक करें.
फ़ेज़ की जानकारी पैनल में नीचे की ओर स्क्रोल करके, गड़बड़ी / जवाब के हेडर सेक्शन पर जाएं. इसके बाद, नीचे दिखाए गए तरीके से X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू तय करें:
- आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू,
protocol.http.Response405WithoutAllowHeaderऔरtargetके तौर पर दिखेंगी. इससे पता चलता है कि यह गड़बड़ी इसलिए हुई है, क्योंकि बैकएंड नेAllowहेडर के बिना405रिस्पॉन्स स्टेटस कोड भेजा है.रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो NGINX के ऐक्सेस लॉग का इस्तेमाल करके, एचटीटीपी
502गड़बड़ियों के बारे में अहम जानकारी पाई जा सकती है. NGINX के ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
यहां: ORG, ORG, और PORT# को असल वैल्यू से बदल दिया जाता है.
- खोजें कि क्या किसी खास अवधि के दौरान, गड़बड़ी कोड
protocol.http.Response405WithoutAllowHeader502वाली कोई गड़बड़ी हुई है (अगर समस्या पहले हुई थी) या क्या अब भी502वाली कोई गड़बड़ी हो रही है. अगर आपको
protocol.http.Response405WithoutAllowHeaderकी वैल्यू से मेल खाने वाले X-Apigee-fault-code के साथ502से जुड़ी कोई गड़बड़ी मिलती है, तो X-Apigee-fault-source की वैल्यू का पता लगाएं.NGINX के ऐक्सेस लॉग में मौजूद 502 गड़बड़ी का उदाहरण:
NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X-Apigee- fault-code और X-Apigee-fault-source: के लिए ये वैल्यू मौजूद हैं:
रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
वजह: बैकएंड सर्वर से, Allow हेडर के बिना 405 रिस्पॉन्स मिला है
संक्रमण की जांच
- एपीआई मॉनिटरिंग, Trace Tool या NGINX ऐक्सेस लॉग का इस्तेमाल करके,
502 Bad Gatewayके लिए गड़बड़ी का कोड और गड़बड़ी का सोर्स पता करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है. - अगर गड़बड़ी का कोड
protocol.http.Response405WithoutAllowHeaderहै और गड़बड़ी के सोर्स की वैल्यूtargetहै, तो इसका मतलब है कि बैकएंड सर्वर नेAllowहेडर के बिना405स्टेटस कोड के साथ जवाब दिया है. इसलिए, Apigee, गड़बड़ी कोडprotocol.http.Response405WithoutAllowHeaderके साथ502 Bad Gatewayस्टेटस कोड दिखाता है.
रिज़ॉल्यूशन
इस समस्या को हल करने के लिए, इनमें से कोई एक तरीका अपनाएं:
बैकएंड सर्वर
पहला विकल्प: बैकएंड सर्वर को ठीक करें, ताकि वह Allow हेडर के साथ 405 स्टेटस कोड भेजे:
पक्का करें कि बैकएंड सर्वर हमेशा इस स्पेसिफ़िकेशन का पालन करे RFC 7231, सेक्शन 6.5.5: 405 Method Not Allowed. साथ ही,
405स्टेटस कोड के साथ भेजे. इसके लिए,Allowहेडर के हिस्से के तौर पर, अनुमति वाले तरीकों की सूची शामिल करें. जैसा कि यहां दिखाया गया है:Allow: HTTP_METHODS
- उदाहरण के लिए, अगर आपका बैकएंड सर्वर
GET,POST, औरHEADतरीकों का इस्तेमाल करने की अनुमति देता है, तो आपको यह पक्का करना होगा किAllowहेडर में ये तरीके इस तरह शामिल हों:Allow: GET, POST, HEAD
गड़बड़ी ठीक करना
दूसरा विकल्प: अपने एपीआई प्रॉक्सी से, Allow हेडर के साथ 405 स्टेटस कोड भेजने के लिए, गड़बड़ी ठीक करने की सुविधा का इस्तेमाल करें:
अगर बैकएंड सर्वर, Allow हेडर के बिना 405 स्टेटस कोड दिखाता है, तो गड़बड़ी ठीक करने की सुविधा का इस्तेमाल करके, 405 स्टेटस कोड और Allow हेडर के साथ जवाब दिया जा सकता है. इसके लिए, अपनी एपीआई प्रॉक्सी का इस्तेमाल करें. ऐसा इस तरह से किया जा सकता है:
AssignMessage नीति या RaiseFault नीति जैसी कोई नीति बनाएं. इसके बाद, स्टेटस कोड को
405पर सेट करें. साथ ही,Allowहेडर और कस्टम मैसेज जोड़ें.Allow हेडर के साथ 405 स्टेटस कोड भेजने के लिए, AssignMessage नीति का सैंपल:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
TargetEndpointमेंFaultRuleबनाएं. इससे502गड़बड़ी मिलने पर, नीति लागू हो जाएगी. गड़बड़ी का कोडprotocol.http.Response405WithoutAllowHeaderहै.TargetEndpoint कॉन्फ़िगरेशन का सैंपल, जिसमें FaultRule दिखाया गया है:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- इन बदलावों को अपनी एपीआई प्रॉक्सी के नए वर्शन में सेव करें और वर्शन को डिप्लॉय करें.
- एपीआई कॉल करें और पुष्टि करें कि आपको
Allowहेडर के साथ405स्टेटस कोड मिल रहा है.
प्रॉपर्टी कॉन्फ़िगर करना
तीसरा विकल्प: मैसेज प्रोसेसर में प्रॉपर्टी कॉन्फ़िगर करें, ताकि Apigee Edge 502 गड़बड़ी न दिखाए
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो प्रॉपर्टी को
HTTP.ignore.allow_header.for.405सेtrueपर अपडेट किया जा सकता है. इससे Apigee Edge,502गड़बड़ी नहीं करेगा. भले ही, बैकएंड सर्वरAllowहेडर के बिना405स्टेटस कोड के साथ जवाब देता हो. इसके लिए, यह तरीका अपनाएं: मैसेज प्रोसेसर में 405 प्रॉपर्टी के लिए, 'अनुमति दें' हेडर को अनदेखा करने की सुविधा कॉन्फ़िगर करना. - अगर आप Public Cloud के उपयोगकर्ता हैं, तो कृपया Apigee Edge की सहायता टीम से संपर्क करें
खास जानकारी
Apigee को बैकएंड सर्वर से 405 Method Not Allowed रिस्पॉन्स के साथ-साथ, यहां दी गई खास बातों के मुताबिक Allow हेडर की ज़रूरत होती है:
| खास जानकारी | |
|---|---|
| RFC 7231, सेक्शन 6.5.5: 405 इस एचटीटीपी मेथड से ऐक्सेस करने की अनुमति नहीं है | |
| आरएफ़सी 7231, सेक्शन 7.4.1: अनुमति दें |
ध्यान देने वाली ज़रूरी बातें
हमारा सुझाव है कि बैकएंड सर्वर को ठीक करें, ताकि वह Allow हेडर के साथ 405 स्टेटस कोड
भेज सके. साथ ही,
आरएफ़सी 7231, सेक्शन 6.5.5: 405 मेथड की अनुमति नहीं है की खास बातों का पालन कर सके.
अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.
डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो डाइग्नोस्टिक की यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.
अगर आप पब्लिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
curlकमांड का इस्तेमाल करके, गड़बड़ी के कोडprotocol.http.Response405WithoutAllowHeaderके साथ502 Bad Gatewayको फिर से बनाया गया- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
अगर आप Private Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:
- अनुरोध पूरे न होने पर, गड़बड़ी का पूरा मैसेज दिखता है
- परिवेश का नाम
- एपीआई प्रॉक्सी बंडल
- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
NGINX ऐक्सेस लॉग
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
यहां: ORG, ORG, और PORT# को असल वैल्यू से बदल दिया जाता है.
- मैसेज प्रोसेसर के सिस्टम लॉग
/opt/apigee/var/log/edge-message-processor/logs/system.log