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

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

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

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

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

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

HTTP/1.1 502 Bad Gateway

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

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

संभावित कारण

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

गड़बड़ी की जांच करने के सामान्य तरीके

  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. एज माइक्रोगेटवे और बैकएंड सर्वर के बीच tcpdump को कैप्चर करें Edge Microgateway होस्ट करने वाला ऑपरेटिंग सिस्टम निम्न आदेश के साथ:
    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 भेजता है अनुरोध. हालांकि, यह इसलिए विफल रहा, क्योंकि सर्वर ने पहले ही कनेक्शन. यह पैकेट में RST के साथ जवाब देता है 262441.

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

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

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

रिज़ॉल्यूशन

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

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

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

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

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

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

    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 ने बैकएंड सर्वर से एपीआई अनुरोध भेजा गया और वह जवाब का इंतज़ार कर रहा था. हालांकि, बैकएंड में एज माइक्रोगेटवे से जवाब मिलने से पहले सर्वर ने कनेक्शन को अचानक बंद कर दिया.

  3. अपने बैकएंड सर्वर लॉग की जांच करें और देखें कि क्या कोई ऐसी गड़बड़ी या जानकारी है जो ने बैकएंड सर्वर को अचानक से कनेक्शन खत्म कर दिया. अगर आपको कोई गड़बड़ी मिलती है या उसके बाद समाधान पर जाएं और समस्या को उचित तरीके से ठीक करें .
  4. अगर आपको अपने बैकएंड सर्वर में कोई गड़बड़ी या जानकारी नहीं मिलती, तो Edge माइक्रोगेटवे सर्वर पर 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. सात के बाद वाले पैकेट में, कनेक्शन एक-दूसरे से बंद रहता है. कनेक्शन होने की वजह से जवाब भेजने से पहले ही बंद कर दिया गया है, एज माइक्रोगेटवे एचटीटीपी 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) में. हां उपलब्ध कराने से पहले log > level को info में बदलने का सुझाव दिया जाता है लॉग फ़ाइलें Apigee सहायता पर भेजता है.
    • कॉन्फ़िगरेशन फ़ाइल: Edge Microgateway का मुख्य कॉन्फ़िगरेशन YAML फ़ाइल, $HOME/.edgemicro के डिफ़ॉल्ट एज माइक्रोगेटवे फ़ोल्डर में है. कई डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल, जिसे default.yaml कहा जाता है. इसके बाद, हर एनवायरमेंट के लिए एक फ़ाइल बनाई जाती है ORG-ENV-config.yaml. कृपया यह फ़ाइल अपलोड करें संगठन और एनवायरमेंट की पूरी जानकारी के लिए.