502 गलत गेटवे - हेडर के बिना जवाब 405

आपको 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 के उपयोगकर्ताओं के लिए

गड़बड़ी का पता लगाने के सामान्य चरण

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

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

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

  1. Edge UI में, ज़रूरी भूमिका वाले उपयोगकर्ता के तौर पर लॉग इन करें.
  2. उस संगठन पर स्विच करें जिसमें आपको समस्या की जांच करनी है.

    संगठन का ड्रॉप-डाउन मेन्यू
  3. विश्लेषण करें > एपीआई मॉनिटरिंग > जांच करें पेज पर जाएं.
  4. वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखीं.
  5. समय के हिसाब से गड़बड़ी का कोड प्लॉट करें.

  6. उस सेल को चुनें जिसमें गड़बड़ी का कोड protocol.http.Response405WithoutAllowHeader मौजूद है. इसे नीचे दिखाया गया है:

  7. गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader के बारे में जानकारी, यहां दिखाई गई है:

  8. ज़्यादा जानकारी देखने के लिए, लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले किसी अनुरोध को बड़ा करें.

  9. लॉग विंडो में, यह जानकारी नोट करें:
    • स्टेटस कोड: 502
    • गड़बड़ी का सोर्स: target
    • गड़बड़ी का कोड: protocol.http.Response405WithoutAllowHeader.
  10. अगर गड़बड़ी का सोर्स target है और गड़बड़ी का कोड protocol.http.Response405WithoutAllowHeader है, तो इसका मतलब है कि बैकएंड सर्वर ने Allow हेडर के बिना 405 Method Not Allowed स्टेटस कोड के साथ जवाब दिया है.

ट्रेस टूल

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

  1. ट्रेस सेशन और इनमें से कोई एक सुविधा चालू करें:
    • 502 Bad Gateway गड़बड़ी होने का इंतज़ार करें या
    • अगर आपको समस्या का पता चल गया है, तो समस्या को फिर से ठीक करने के लिए एपीआई कॉल करें - 502 Bad Gateway गड़बड़ी
  2. पक्का करें कि Show all FlowInfos चालू हो:

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

  6. ट्रेस से गड़बड़ी की वैल्यू नोट करें.

    ऊपर दिए गए सैंपल ट्रेस में, गड़बड़ी को Received 405 Response without Allow Header के तौर पर दिखाया गया है. अनुरोध को बैकएंड सर्वर पर भेजने के बाद, Apigee ने यह गड़बड़ी की है. इससे पता चलता है कि बैकएंड सर्वर ने Allow हेडर के बिना 405 रिस्पॉन्स स्टेटस कोड भेजा है.

  7. ट्रेस में AX (Analytics Data Recorded) फ़ेज़ पर जाएं और उस पर क्लिक करें.
  8. फ़ेज़ की जानकारी पैनल में नीचे की ओर स्क्रोल करके, गड़बड़ी / जवाब के हेडर सेक्शन पर जाएं. इसके बाद, नीचे दिखाए गए तरीके से X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू तय करें:

  9. आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू, protocol.http.Response405WithoutAllowHeader और target के तौर पर दिखेंगी. इससे पता चलता है कि यह गड़बड़ी इसलिए हुई है, क्योंकि बैकएंड ने Allow हेडर के बिना 405 रिस्पॉन्स स्टेटस कोड भेजा है.
    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

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

  1. अगर आप Private Cloud के उपयोगकर्ता हैं, तो NGINX के ऐक्सेस लॉग का इस्तेमाल करके, एचटीटीपी 502 गड़बड़ियों के बारे में अहम जानकारी पाई जा सकती है.
  2. NGINX के ऐक्सेस लॉग देखें:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    यहां: ORG, ORG, और PORT# को असल वैल्यू से बदल दिया जाता है.

  3. खोजें कि क्या किसी खास अवधि के दौरान, गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader 502 वाली कोई गड़बड़ी हुई है (अगर समस्या पहले हुई थी) या क्या अब भी 502 वाली कोई गड़बड़ी हो रही है.
  4. अगर आपको 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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

वजह: बैकएंड सर्वर से, Allow हेडर के बिना 405 रिस्पॉन्स मिला है

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

  1. एपीआई मॉनिटरिंग, Trace Tool या NGINX ऐक्सेस लॉग का इस्तेमाल करके, 502 Bad Gateway के लिए गड़बड़ी का कोड और गड़बड़ी का सोर्स पता करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है.
  2. अगर गड़बड़ी का कोड protocol.http.Response405WithoutAllowHeader है और गड़बड़ी के सोर्स की वैल्यू target है, तो इसका मतलब है कि बैकएंड सर्वर ने Allow हेडर के बिना 405 स्टेटस कोड के साथ जवाब दिया है. इसलिए, Apigee, गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader के साथ 502 Bad Gateway स्टेटस कोड दिखाता है.

रिज़ॉल्यूशन

इस समस्या को हल करने के लिए, इनमें से कोई एक तरीका अपनाएं:

बैकएंड सर्वर

पहला विकल्प: बैकएंड सर्वर को ठीक करें, ताकि वह Allow हेडर के साथ 405 स्टेटस कोड भेजे:

  1. पक्का करें कि बैकएंड सर्वर हमेशा इस स्पेसिफ़िकेशन का पालन करे RFC 7231, सेक्शन 6.5.5: 405 Method Not Allowed. साथ ही, 405 स्टेटस कोड के साथ भेजे. इसके लिए, Allow हेडर के हिस्से के तौर पर, अनुमति वाले तरीकों की सूची शामिल करें. जैसा कि यहां दिखाया गया है:

    Allow: HTTP_METHODS
  2. उदाहरण के लिए, अगर आपका बैकएंड सर्वर GET, POST, और HEAD तरीकों का इस्तेमाल करने की अनुमति देता है, तो आपको यह पक्का करना होगा कि Allow हेडर में ये तरीके इस तरह शामिल हों:
    Allow: GET, POST, HEAD

गड़बड़ी ठीक करना

दूसरा विकल्प: अपने एपीआई प्रॉक्सी से, Allow हेडर के साथ 405 स्टेटस कोड भेजने के लिए, गड़बड़ी ठीक करने की सुविधा का इस्तेमाल करें:

अगर बैकएंड सर्वर, Allow हेडर के बिना 405 स्टेटस कोड दिखाता है, तो गड़बड़ी ठीक करने की सुविधा का इस्तेमाल करके, 405 स्टेटस कोड और Allow हेडर के साथ जवाब दिया जा सकता है. इसके लिए, अपनी एपीआई प्रॉक्सी का इस्तेमाल करें. ऐसा इस तरह से किया जा सकता है:

  1. 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>
  2. 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>
  3. इन बदलावों को अपनी एपीआई प्रॉक्सी के नए वर्शन में सेव करें और वर्शन को डिप्लॉय करें.
  4. एपीआई कॉल करें और पुष्टि करें कि आपको Allow हेडर के साथ 405 स्टेटस कोड मिल रहा है.

प्रॉपर्टी कॉन्फ़िगर करना

तीसरा विकल्प: मैसेज प्रोसेसर में प्रॉपर्टी कॉन्फ़िगर करें, ताकि Apigee Edge 502 गड़बड़ी न दिखाए

  1. अगर आप Private Cloud के उपयोगकर्ता हैं, तो प्रॉपर्टी को HTTP.ignore.allow_header.for.405 से true पर अपडेट किया जा सकता है. इससे Apigee Edge, 502 गड़बड़ी नहीं करेगा. भले ही, बैकएंड सर्वर Allow हेडर के बिना 405 स्टेटस कोड के साथ जवाब देता हो. इसके लिए, यह तरीका अपनाएं: मैसेज प्रोसेसर में 405 प्रॉपर्टी के लिए, 'अनुमति दें' हेडर को अनदेखा करने की सुविधा कॉन्फ़िगर करना.
  2. अगर आप 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

रेफ़रंस

Apigee में गड़बड़ी ठीक करने की सुविधा