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 तरीके की अनुमति नहीं है के मुताबिक, यह उम्मीद की जाती है कि मूल सर्वर को 405 के रिस्पॉन्स में Allow हेडर फ़ील्ड जनरेट करके भेजना चाहिए. इसमें टारगेट रिसॉर्स के उन तरीकों की सूची शामिल होनी चाहिए जिनका फ़िलहाल इस्तेमाल किया जा सकता है. अगर ऐसा नहीं है, तो Apigee 502 Bad Gateway और गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader के साथ जवाब देता है.

वजह ब्यौरा समस्या हल करने के लिए निर्देश
बैकएंड सर्वर से हेडर की अनुमति के बिना 405 रिस्पॉन्स एपीआई अनुरोध को प्रोसेस करने वाला बैकएंड सर्वर, Allow हेडर के बिना 405 स्टेटस कोड दिखाता है. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

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

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

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

  1. सही भूमिका वाले उपयोगकर्ता के तौर पर, Edge यूज़र इंटरफ़ेस (यूआई) में लॉग इन करें.
  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. पक्का करें कि FlowInfos दिखाएं चालू है:

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

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

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

  7. ट्रेस में AX (Analytics डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उस पर क्लिक करें.
  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. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो आपके पास 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. अगर आपको X-Apigee-fault-code की कोई ऐसी 502 गड़बड़ी मिलती है जो protocol.http.Response405WithoutAllowHeader की वैल्यू से मेल खाती है, तो X-Apigee-fault-source की वैल्यू तय करें.

    NGINX ऐक्सेस लॉग से 502 गड़बड़ी का नमूना:

    NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में X-Apigee- दबाकर गड़बड़ी का कोड और X-Apigee-fault-source की ये वैल्यू दी गई हैं:

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

वजह: बैकएंड सर्वर से हेडर की अनुमति के बिना 405 रिस्पॉन्स

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

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

रिज़ॉल्यूशन

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

बैकएंड सर्वर

पहला विकल्प: 'अनुमति दें' हेडर के साथ 405 स्टेटस कोड भेजने के लिए, बैकएंड सर्वर को ठीक करें:

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

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

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

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

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

  1. कोई नीति बनाएं, जैसे कि assignMessage नीति या Refault नीति और स्टेटस कोड को Allow हेडर और पसंद के मुताबिक मैसेज की मदद से 405 पर सेट करें.

    अनुमति दें हेडर के साथ 405 भेजने के लिए सैंपल AssignmentsMessage नीति:

    <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 बनाएं जो गड़बड़ी कोड protocol.http.Response405WithoutAllowHeader के साथ 502 गड़बड़ी मिलने पर, नीति को शुरू करता हो.

    FultTerms के बारे में जानकारी देने वाले टारगेट एंडपॉइंट कॉन्फ़िगरेशन का सैंपल:

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

खास जानकारी

Apigee को यहां बताए गए निर्देशों के मुताबिक, बैकएंड सर्वर के साथ-साथ Allow हेडर से 405 Method Not Allowed रिस्पॉन्स मिलने की उम्मीद है:

खास जानकारी
आरएफ़सी 7231, सेक्शन 6.5.5: 405 तरीके की अनुमति नहीं है
आरएफ़सी 7231, सेक्शन 7.4.1: अनुमति दें

इन बातों का ध्यान रखें

इसका सुझाव दिया जाता है कि बैकएंड सर्वर को ठीक करें, ताकि Allow हेडर के साथ 405 स्टेटस कोड भेजा जा सके. साथ ही, आरएफ़सी 7231, सेक्शन 6.5.5: 405 तरीके की अनुमति नहीं है का पालन करें.

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

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

अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी से जुड़ी यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.

अगर आप Public Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:

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

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

  • असफल अनुरोधों के लिए देखा गया पूरा गड़बड़ी का मैसेज
  • परिवेश का नाम
  • एपीआई प्रॉक्सी बंडल
  • एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
  • 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
    

References

Apigee में गड़बड़ियां मैनेज करना