कुछ नगनेक्स रिवर्स प्रॉक्सी कॉन्फिगर दिन में एक बार काम करना बंद कर देते हैं


12

मेरे पास एक nginx रिवर्स-प्रॉक्सी है जो एक बाहरी amazon ELB से आंतरिक ELBs के लिए अनुरोध करता है।

मेरे पास 6 बैकेंड उदाहरण हैं जो अनुरोधों को संभालते हैं। साइट-सक्षम कॉन्फ़िगरेशन ऐसा दिखता है, लेकिन अलग-अलग पोर्ट नंबर और प्रॉक्सी_पास हैं। बाकी सब कुछ समान है:

server {
    listen 3000;
    location / {
            proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000;
            include /etc/nginx/proxy.conf;
    }

}

एक बार हर 24 घंटों के बाद कॉन्फ़िगरेशन में से एक काम करना बंद कर देता है। अन्य सभी परदे के पीछे ठीक काम करता है। यदि मैं nginx को पुनरारंभ करता हूं तो सभी कॉन्फ़िगरेशन फिर से काम करता है। एरर.लॉग में कुछ भी नहीं है, एक्सेस लॉग, सिसलॉग या डम्सग में कुछ भी अजीब नहीं है।

क्या यह कुछ ज्ञात है? क्या मैंने अपने प्रॉक्सी कॉन्फ़िगर के साथ कुछ गलत किया है? वहाँ कोई अन्य लॉग मैं में देख सकते हैं?



जवाबों:


22

इस सवाल का जवाब यह है कि ईएलबी कभी-कभी आईपी एड्रेस को बदलते हैं और नग्नेक्स शुरुआत के दौरान नाम हल करते हैं।

इसे ठीक करने के लिए आपके VPC में हमेशा 0.2 पर एक DNS सर्वर होता है। इसलिए यदि स्थानीय IP CIDR 10.0.0.0/16 है तो DNS सर्वर 10.0.0.2 पर है।

इसे nginx config में जोड़ें।

resolver 10.0.0.2 valid=10s;

प्रॉक्सी_पास को भी एक चर के रूप में परिभाषित करने की आवश्यकता है अन्यथा nginx केवल एक बार इसे हल करेगा। तो इसके ऊपर विन्यास के आधार पर यह सही विन्यास है:

server {
    listen 3000;
    location / {
            resolver 10.0.0.2 valid=10s;
            set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000"
            proxy_pass $backend;
            include /etc/nginx/proxy.conf;
    }
}

क्या किसी को पता है कि nginx का कौन सा संस्करण प्रॉक्सी_पास सेटिंग में चर का समर्थन करता है? मैं इलास्टिक बीनस्टॉक (nginx संस्करण 1.6.2) पर कोशिश कर रहा हूं और यह वैसे भी वैरिएबल को स्वीकार नहीं करना चाहता है, इसे डाल दिया जाए।
स्टीफन C

इसके लिए धन्यवाद, शाब्दिक रूप से लगभग एक महीने से हमें पागल कर दिया गया है!
जिम आर। आर।

Nginx ब्लॉक पर यह लेख इस कॉन्फ़िगरेशन को भी गूँजता है। nginx.com/blog/dns-service-discovery-nginx-plus
मॉर्गन क्रिश्चियनसन

1

यदि आपका प्रॉक्सी_पास आपके उदाहरण शो ( http://amazonaws.com ) की तरह सीधे एक URL से नहीं गुजरा है , लेकिन इसके बजाय एक प्रॉक्सी अपस्ट्रीम फ़ार्म, इस तरह:

upstream my_upstream {
 server1 127.0.0.1:1337;
 server2 127.0.0.1:1338; 
}
location / {
 proxy_pass         http://my_upstream;
}

फिर आप अस्थायी रूप से विफल होने वाली अपस्ट्रीम में से एक के बारे में कम चिंतित होंगे। क्योंकि वे सभी एक ही काम कर रहे होंगे। यदि कोई उत्तर देने में विफल रहता है, तो अगले व्यक्ति को उस प्रतिक्रिया के लिए अनुमानित किया जाएगा। मन की शांति।

Nginx x सेकंड ऑटोमैटिकली के लिए एक असफल मशीन को छोड़ देगा। जब तक आप इसकी मरम्मत नहीं करते हैं, या जब तक यह अपने आप वापस नहीं आता है। ( http://wiki.nginx.org/HttpUpstreamModule )

तो जो कुछ भी आपके रुकावट का कारण हो सकता है, उन्हें एक अपस्ट्रीम फार्म पर वितरित करके, यह एक आसान सेटअप में परिवर्तित हो जाता है।


आपके जवाब का धन्यवाद! अजीब बात यह है कि मैं बैकएंड उदाहरण के लिए सीधे अनुरोध कर सकता हूं लेकिन नगनेक्स के माध्यम से नहीं। अगर मैं अभी nginx को पुनः आरंभ करता हूं तो अनुरोध फिर से किया जाता है। चूंकि यह पहले से ही उत्पादन के माहौल में है, इसलिए मैं वास्तव में यह जानना चाहता हूं कि किसी एक कॉन्फिग को "अनलोड" क्यों किया जाता है या मैं कैसे पता लगा सकता हूं कि नग्नेक्स वास्तव में पर्दे के पीछे क्या करता है।
user202172

आप तब अधिक नगीन लॉगिंग जानकारी के लिए शिकार करना चाहते हैं। यह एक मुद्दा जहां किसी की कोशिश की आप की तरह है, और अधिक के बारे में पता लगाने के लिए कि "रुक-रुक कर मुद्दों [...] मैं प्रॉक्सी हूँ" stackoverflow.com/questions/9914792/... वह और अधिक प्रासंगिक लॉग खींच का एक तरीका वर्णन करता है। आशा करता हूँ की ये काम करेगा।
user18099
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.