2017-03-10 10 views
6

में नहीं मिला है मैं ईसीएस सर्वर पर डॉकर-एनजिनक्स चला रहा हूं। मेरी nginx सेवा अचानक बंद कर दी गई है क्योंकि सर्वरों में से एक का proxy_path पहुंच योग्य नहीं है। इस प्रकार त्रुटि है:डॉकर Nginx बंद कर दिया: [उभरता] 1 # 1: होस्ट अपस्ट्रीम

[emerg] 1#1: host not found in upstream "dev-example.io" in /etc/nginx/conf.d/default.conf:988 

मेरे कॉन्फ़िग फ़ाइल के रूप में नीचे है:

server { 
     listen  80; 
     server_name  test.com; 
     location/{ 
      proxy_pass   http://dev-exapmle.io:5016/; 
      proxy_redirect  off; 

      ##proxy_set_header Host    $host; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      client_max_body_size  10m; 
      client_body_buffer_size 128k; 

      proxy_connect_timeout  90; 
      proxy_send_timeout   90; 
      proxy_read_timeout   90; 

      proxy_buffer_size   4k; 
      proxy_buffers    4 32k; 
      proxy_busy_buffers_size 64k; 
      proxy_temp_file_write_size 64k; 
     } 
} 

server { 
    listen  80 default_server; 
    server_name localhost; 

    #charset koi8-r; 
    #access_log /var/log/nginx/log/host.access.log main; 

    location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

मैं कॉन्फ़िग फ़ाइल में कई सर्वर है, भले ही एक सर्वर डाउन था, मैं nginx चल रहा है की जरूरत है। इसे ठीक करने का कोई तरीका है?

इस मुद्दे को ठीक करने के लिए कोई सुझाव की सराहना की जाएगी।

+0

आम तौर पर यह दो कारणों से हो सकता है: या तो http://dev-exapmle.iooxy016/ में सेवा अनुरोधों का जवाब दे रही है या नहीं; या तो आपके पास कुछ सेलिनक्स कॉन्फ़िगरेशन है जो अनुरोधों को प्रॉक्सी करने से nginx को रोक रहा है। मैं dev-example.io की सेवा करने वाले ऐप के लिए लॉग इन देखता हूं। यदि आप कुछ भी नहीं देख रहे हैं, तो शायद यह एक सेलिनक्स मुद्दा है, इस मामले में आप इस उत्तर को देखना चाहेंगे: http://stackoverflow.com/questions/27435655/nginx-proxy-pass-not- काम करने के लिए काम कर रहे हैं –

+0

@ JoséAntonioHaroPeralta टिप्पणी के लिए धन्यवाद। हाँ वह सेवा, dev-exapmle.io01016, नीचे है। लेकिन मेरे पास मेरी nginx कॉन्फ़िगरेशन फ़ाइल में कई अन्य सेवाएं हैं जो काम करती हैं लेकिन इस सेवा के कारण, nginx रुक गया। इसे ठीक करने का कोई तरीका है? – Matrix

+0

में एक रिज़ॉल्वर निर्देश शामिल है (उदाहरण के लिए Google, 8.8.8.8 के लिए इंगित करना)। Nginx उस समाधान को हल करेगा यदि यह आपकी साइट तक नहीं पहुंच सकता है, जैसा कि निम्न प्रश्नों के उत्तर में दर्शाया गया है: http://stackoverflow.com/questions/32845674/setup-nginx-not-to-crash-if-host-in -अपस्ट्रीम-नहीं मिला –

उत्तर

1

दुर्घटनाग्रस्त अगर आपकी साइट के डाउन से Nginx को रोकने के लिए शामिल करें, शामिल एक रिज़ॉल्वर निर्देश निम्नानुसार है:

server { 
     listen  80; 
     server_name  test.com; 
     location/{ 
      resolver 8.8.8.8 
      proxy_pass   http://dev-exapmle.io:5016/; 
      proxy_redirect  off; 
... 

चेतावनी! सार्वजनिक DNS का उपयोग करके आपके बैकएंड में सुरक्षा जोखिम पैदा होता है क्योंकि आपके DNS अनुरोधों को धोखा दिया जा सकता है। यदि यह कोई समस्या है, तो आपको रिज़ॉल्वर को एक सुरक्षित DNS सर्वर पर इंगित करना चाहिए।

+0

धन्यवाद। अगर मैं संकल्प 127.0.0.1 का उपयोग करता हूं तो क्या होगा? और यदि सर्वर फिर से पहुंच योग्य हो जाता है, तो क्या यह सही पथ को रूट करेगा? – Matrix

2

आमतौर पर इसका मतलब है कि आपके द्वारा प्रदान किए गए डीएनएस नाम को अपस्ट्रीम सर्वर के रूप में हल नहीं किया जा सकता है। इसका परीक्षण करने के लिए, nginx सर्वर पर लॉग ऑन करें और ऊपर दिए गए अपस्ट्रीम सर्वर को पिंग करने का प्रयास करें और देखें कि नाम रिज़ॉल्यूशन सही तरीके से पूर्ण हो गया है या नहीं, यदि यह एक डॉकर कंटेनर खोलने के लिए docker exec -it आज़माता है, तो नाम रिज़ॉल्यूशन का परीक्षण करने के लिए अपस्ट्रीम को पिंग करने का प्रयास करें। यदि contianer बंद कर दिया गया है तो अपने सर्वर ब्लॉक में डीएनएस नाम के बजाय आईपी पता का उपयोग करने का प्रयास करें।

proxy_pass   http://<IP ADDRESS>:5016/; 

तुम भी समाधानकर्ता निर्देश उपयोग कर सकते हैं आप मेजबान सिस्टम की तुलना में इस स्थान के लिए अलग DNS सर्वर उपयोग करना चाहते हैं:

resolver 8.8.8.8; 
+0

इसके लिए कोई आईपी पता नहीं है, मेरे पास डीएनएस है जो डॉकर-क्लाउड सेवाओं का एंड-यूआरएल है – Matrix

+0

एक डिफ़ॉल्ट कॉन्फ़िगरेशन nginx कंटेनर लाएं, फिर डीएनएस को पिंग करने का प्रयास करें ताकि यह देखने के लिए कि संकल्प होता है या नहीं सही ढंग से। –

+0

धन्यवाद। फिर मैं इसके बजाय संकल्प का उपयोग करता हूं। लेकिन अगर मैं संकल्प 127.0.0.1 का उपयोग करता हूं; क्या यह ठीक काम करेगा? अगर DNS बाद में काम करता है तो क्या होगा? इसके अलावा वैध = 30s की आवश्यकता नहीं है; ? – Matrix

संबंधित मुद्दे