502 गलत गेटवे - सॉकेट बंद करें

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को Edge Microgateway में एपीआई कॉल के जवाब के तौर पर, 502 Bad Gateway एचटीटीपी स्टेटस कोड मिलता है. साथ ही, कोड ECONNRESET मिलता है.

गड़बड़ी का मैसेज

क्लाइंट को यह रिस्पॉन्स कोड दिखेगा:

HTTP/1.1 502 Bad Gateway

जवाब में यह गड़बड़ी का मैसेज शामिल होगा:

{"message":"socket hang up","code":"ECONNRESET"}

संभावित कारण

वजह ब्यौरा इनके लिए समस्या हल करने के निर्देश
कीप-अलाइव टाइमआउट को गलत तरीके से कॉन्फ़िगर किया गया है Edge Microgateway और टारगेट सर्वर के बीच, कीप-अलाइव टाइमआउट को गलत तरीके से कॉन्फ़िगर किया गया है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
टारगेट सर्वर, कनेक्शन को समय से पहले बंद कर देता है Edge Microgateway, अनुरोध का पेलोड भेज रहा है. इस दौरान, टारगेट सर्वर कनेक्शन बंद कर देता है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए

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

  1. Edge Microgateway के लॉग देखें:
    /var/tmp/edgemicro-`hostname`-*.log
  2. खोजें कि क्या किसी खास अवधि के दौरान, कोड ECONNRESET में कोई 502 गड़बड़ी हुई है (अगर समस्या पहले हुई थी) या क्या अब भी 502 गड़बड़ी की वजह से कोई अनुरोध पूरा नहीं हो पा रहा है.
    2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test]
    [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684]
    [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
  3. अगर आपने लॉगिंग लेवल को warn या info पर सेट किया है, तो दूसरे एलिमेंट में [warn] मैसेज भी दिखेगा. इसमें टारगेट सर्वर का होस्टनेम और पोर्ट शामिल होगा. इस उदाहरण में, यह X.X.X.X:8080 है. इसका इस्तेमाल बाद में tcpdump को कैप्चर करने के लिए किया जा सकता है.
    2021-06-23T03:52:24.109Z
    [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup]
    [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware]
    [targetRequest error][GET][][socket hang up][ECONNRESET][395]
  4. गड़बड़ी कोड [socket hang up][ECONNRESET] से पता चलता है कि टारगेट सर्वर ने Edge Microgateway से कनेक्शन बंद कर दिया है. यह पता लगाने के लिए कि ऐसा कितनी बार हो रहा है, इसे लॉग में खोजा जा सकता है.

वजह: कीप-अलाइव टाइमआउट को गलत तरीके से कॉन्फ़िगर किया गया है

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

  1. गड़बड़ी का पता लगाने के सामान्य तरीके में दिए गए चरणों का पालन करें. साथ ही, पुष्टि करें कि आपको [socket hang up][ECONNRESET] गड़बड़ी मिली है या नहीं.
  2. अगर हां, तो यहां दिए गए तरीके से tcpdump की मदद से इस समस्या की जांच करें:

tcpdump का इस्तेमाल करना

  1. नीचे दिए गए निर्देश का इस्तेमाल करके, Edge Microgateway होस्ट करने वाले ऑपरेटिंग सिस्टम पर Edge Microgateway और बैकएंड सर्वर के बीच tcpdump कैप्चर करें:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. tcpdump का विश्लेषण करें:

    tcpdump के आउटपुट का उदाहरण: ( बड़ी इमेज देखें)

    ऊपर दिए गए सैंपल tcpdump में, यह जानकारी देखी जा सकती है:

    1. पैकेट 250288 में, क्लाइंट POST अनुरोध भेजता है.
    2. पैकेट 250371 में, सर्वर 200 OK के साथ जवाब देता है.
    3. पैकेट 250559 में, क्लाइंट ने ACK. भेजा है
    4. पैकेट 250560 में, सर्वर Continuation मैसेज भेजता है.
    5. पैकेट 250561 में, क्लाइंट ने ACK. भेजा है
    6. पैकेट 262436 में, सर्वर उस क्लाइंट को FIN, ACK भेजता है जिसने कनेक्शन बंद करने का अनुरोध किया था. ध्यान दें कि यह पिछले पैकेट (250561) के करीब पांच सेकंड बाद का है.
    7. पैकेट 262441 में, क्लाइंट एक और POST अनुरोध भेजता है. हालांकि, ऐसा नहीं हो पाता, क्योंकि सर्वर पहले ही कनेक्शन बंद कर चुका होता है. यह पैकेट 262441 में RST के साथ जवाब देता है.

    इस उदाहरण में, एक ही कनेक्शन का इस्तेमाल कम से कम एक बार किया गया है. हालांकि, आखिरी अनुरोध पर सर्वर, पांच सेकंड तक कोई गतिविधि न होने के बाद कनेक्शन बंद कर देता है. ऐसा उसी समय होता है जब क्लाइंट ने नया अनुरोध भेजा था. इससे पता चलता है कि बैकएंड सर्वर के कीप-अलाइव टाइमआउट की अवधि, क्लाइंट में सेट की गई वैल्यू से कम या उसके बराबर है. इसकी पुष्टि करने के लिए, Edge Microgateway और बैकएंड सर्वर पर कीप-अलाइव टाइमआउट की तुलना करें लेख पढ़ें.

कीप-अलाइव टाइमआउट की तुलना करना

  1. Edge Microgateway में, कीप-अलाइव टाइमआउट की कोई खास प्रॉपर्टी नहीं होती. इसे उस ऑपरेटिंग सिस्टम के हिसाब से तय किया जाता है जिस पर यह चल रहा है. इसके सामान्य उदाहरण हैं Windows, Linux, और Docker कंटेनर.
  2. ऐसा हो सकता है कि ऑपरेटिंग सिस्टम में इसे पसंद के मुताबिक बनाया गया हो. अपने सिस्टम एडमिन से संपर्क करें. डिफ़ॉल्ट रूप से, Linux ऑपरेटिंग सिस्टम में कीप-अलाइव का डिफ़ॉल्ट टाइमआउट दो घंटे होता है.
  3. इसके बाद, अपने बैकएंड सर्वर पर कॉन्फ़िगर की गई कीप-अलाइव टाइमआउट प्रॉपर्टी देखें. मान लें कि आपका बैकएंड सर्वर, 10 सेकंड की वैल्यू के साथ कॉन्फ़िगर किया गया है.
  4. अगर आपको लगता है कि ऑपरेटिंग सिस्टम पर कीप-अलाइव टाइमआउट की वैल्यू, बैकएंड सर्वर पर कीप-अलाइव टाइमआउट प्रॉपर्टी की वैल्यू से ज़्यादा है, जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है, तो 502 गड़बड़ियों की वजह यही है.

रिज़ॉल्यूशन

पक्का करें कि Edge Microgateway चलाने वाले ऑपरेटिंग सिस्टम पर, कीप-अलाइव टाइमआउट प्रॉपर्टी की वैल्यू हमेशा बैकएंड सर्वर की तुलना में कम हो.

  1. बैकएंड सर्वर पर, कीप-अलाइव टाइमआउट के लिए सेट की गई वैल्यू का पता लगाएं.
  2. ऑपरेटिंग सिस्टम में, कीप-अलाइव टाइमआउट प्रॉपर्टी के लिए सही वैल्यू कॉन्फ़िगर करें. ऐसा इसलिए, ताकि कीप-अलाइव टाइमआउट प्रॉपर्टी, बैकएंड सर्वर पर सेट की गई वैल्यू से कम हो. इसके लिए, अपने ऑपरेटिंग सिस्टम पर लागू होने वाले चरणों का इस्तेमाल करें.

सबसे सही तरीका

हमारा सुझाव है कि डाउनस्ट्रीम कॉम्पोनेंट में, कीप-अलाइव टाइमआउट थ्रेशोल्ड हमेशा अपस्ट्रीम सर्वर पर कॉन्फ़िगर किए गए थ्रेशोल्ड से कम होना चाहिए. इससे इस तरह की रेस कंडीशन और 502 गड़बड़ियों से बचा जा सकता है. हर डाउनस्ट्रीम हॉप, हर अपस्ट्रीम हॉप से कम होना चाहिए. Edge Microgateway में, इन दिशा-निर्देशों का पालन करना सबसे सही तरीका है:

  1. क्लाइंट ऐप्लिकेशन या लोड बैलेंसर पर कीप-अलाइव टाइमआउट, Edge Microgateway के कीप-अलाइव टाइमआउट से कम होना चाहिए.

    Edge Microgateway पर कीप-अलाइव टाइमआउट को कॉन्फ़िगर करने के लिए, अपनी ~/.edgemicro/org-env-config.yaml फ़ाइल में keep_alive_timeout वैल्यू जोड़ें.

    edgemicro:
      keep_alive_timeout: 65000
  2. Edge Microgateway के ऑपरेटिंग सिस्टम का कीप-अलाइव टाइमआउट, टारगेट सर्वर के कीप-अलाइव टाइमआउट से कम होना चाहिए.
  3. अगर आपके पास Edge Microgateway के आगे या पीछे कोई अन्य हॉप है, तो यही नियम लागू होना चाहिए. आपको हमेशा डाउनस्ट्रीम क्लाइंट को यह ज़िम्मेदारी देनी चाहिए कि वह अपस्ट्रीम से कनेक्शन बंद करे.

वजह: टारगेट सर्वर, कनेक्शन को समय से पहले बंद कर देता है

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

  1. विश्लेषण के सामान्य चरणों में बताए गए तरीके का इस्तेमाल करें और पुष्टि करें कि आपको [socket hang up][ECONNRESET] गड़बड़ी मिली है या नहीं.
  2. अगर हां, तो नीचे दिए गए तरीके से tcpdump की मदद से इस समस्या की जांच करें.

    ऊपर दिए गए उदाहरण में, गड़बड़ी के मैसेज [targetRequest error][GET][][socket hang up][ECONNRESET] से पता चलता है कि यह गड़बड़ी तब हुई, जब Edge Microgateway, बैकएंड (टारगेट) सर्वर को अनुरोध भेज रहा था. इसका मतलब है कि Edge Microgateway ने बैकएंड सर्वर को एपीआई अनुरोध भेजा था और वह जवाब का इंतज़ार कर रहा था. हालांकि, बैकएंड सर्वर ने Edge Microgateway को जवाब मिलने से पहले ही कनेक्शन बंद कर दिया.

  3. अपने बैकएंड सर्वर के लॉग देखें और देखें कि क्या कोई ऐसी गड़बड़ी या जानकारी है जिसकी वजह से बैकएंड सर्वर ने कनेक्शन को अचानक बंद कर दिया हो. अगर आपको कोई गड़बड़ी या जानकारी मिलती है, तो समस्या हल करना पर जाएं और अपने बैकएंड सर्वर में समस्या को ठीक करें.
  4. अगर आपको अपने बैकएंड सर्वर में कोई गड़बड़ी या जानकारी नहीं मिलती है, तो Edge Microgateway सर्वर पर tcpdump आउटपुट इकट्ठा करें:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. tcpdump का विश्लेषण करें:

    tcpdump के आउटपुट का उदाहरण: ( बड़ी इमेज देखें)

    ऊपर दिए गए सैंपल tcpdump में, यह जानकारी देखी जा सकती है:

    1. पैकेट 4 में, Edge Microgateway ने टारगेट सर्वर को GET अनुरोध भेजा.
    2. पैकेट 5 में, टारगेट सर्वर ने अनुरोध की पुष्टि करने के लिए ACK के साथ जवाब दिया.
    3. हालांकि, पैकेट 6 में, टारगेट सर्वर रिस्पॉन्स पेलोड के साथ जवाब देने के बजाय, FIN, ACK भेजता है. इससे कनेक्शन बंद हो जाता है.
    4. पैकेट 7 से आगे, कनेक्शन को आपसी सहमति से बंद कर दिया जाता है. जवाब भेजे जाने से पहले ही कनेक्शन बंद हो गया था. इसलिए, Edge Microgateway क्लाइंट को एचटीटीपी 502 गड़बड़ी का मैसेज भेजेगा.
    5. ध्यान दें कि पैकेट 8 का टाइमस्टैंप, 2021-06-23T03:52:24.110Z उस टाइमस्टैंप से मेल खाता है जिस पर Edge Microgateway के लॉग में गड़बड़ी लॉग की गई थी. लॉग फ़ाइलों और tcpdump में मौजूद टाइमस्टैंप का इस्तेमाल करके, गड़बड़ियों को असल पैकेट से जोड़ा जा सकता है.

    रिज़ॉल्यूशन

    बैकएंड सर्वर पर समस्या को ठीक करें.

    अगर समस्या बनी रहती है और आपको 502 Bad Gateway Errorसमस्या हल करने में मदद चाहिए या आपको लगता है कि यह समस्या Edge Microgateway में है, तो डाइग्नोस्टिक की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.

    डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है

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

    • लॉग फ़ाइलें: डिफ़ॉल्ट फ़ोल्डर /var/tmp होता है. हालांकि, इसे मुख्य config.yaml फ़ाइल (logging > dir parameter) में बदला जा सकता है. हमारा सुझाव है कि Apigee की सहायता टीम को लॉग फ़ाइलें देने से पहले, log > level को info में बदल दें.
    • कॉन्फ़िगरेशन फ़ाइल: Edge Microgateway का मुख्य कॉन्फ़िगरेशन, Edge Microgateway के डिफ़ॉल्ट फ़ोल्डर $HOME/.edgemicro में मौजूद YAML फ़ाइल में होता है. एक डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल होती है, जिसे default.yaml कहा जाता है. इसके बाद, हर एनवायरमेंट के लिए एक फ़ाइल होती है, जिसे ORG-ENV-config.yaml कहा जाता है. कृपया इस फ़ाइल को पूरे तौर पर अपलोड करें, ताकि इससे प्रभावित संगठन और एनवायरमेंट के लिए इसका इस्तेमाल किया जा सके.