nginx: कई सर्वर निर्देशों के साथ अपस्ट्रीम?


15

मैं 2 एप्लिकेशन को पैकेज करने की कोशिश कर रहा हूं जो nginx को प्रॉक्सी के रूप में उपयोग करते हैं और प्रत्येक कॉन्फिगर फाइल को डिलीवर करते हैं /etc/nginx/conf.d/

एक फ़ाइल में ऐसा करना ( combined.conf) बढ़िया काम करता है:

    upstream backend1 {
      http://localhost:8989;
    }

    upstream backend2 {
      http://localhost:8990;
    }

    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
      location /backend2/ {
        proxy_pass  http://backend2;
      }

हालाँकि, 2 फ़ाइलों में विभाजित होने पर, पुनर्निर्देशन में से एक व्यवस्थित रूप से विफल हो जाता है:

  • backend1.conf:

    upstream backend1 {
      http://localhost:8989;
    }
    
    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
    
  • backend2.conf:

    upstream backend2 {
      http://localhost:8990;
    }
    
    server {
      location /backend2/ {
        proxy_pass  http://backend2;
      }
    

तो मेरा सवाल है: एक httpनोड 2 अलग serverchilds हो सकता है?

Nginx प्रलेखन इसके बारे में कुछ नहीं कहता है।

अन्य लोगों को लगता है कि इस तरह की वास्तुकला के साथ सफल रहे हैं :(

Nginx संस्करण 1.1.19-1ubuntu0.1 है।

किसी भी सलाह के लिए धन्यवाद!


अधिक सटीक होने के लिए, जब मैं 2 फ़ाइलों का उपयोग करता हूं, तो यह डिफ़ॉल्ट साइट है जो 404 के साथ उत्तर देती है।
oDDsKooL

जवाबों:


8

इतनी रंबल और परीक्षण के बाद, मुझे लगा कि यह काम करने का एक तरीका है और प्रति एप्लिकेशन एक कॉन्फ़िगरेशन फ़ाइल को शिप करने में सक्षम है।

यहाँ यह है, एक आम फ़ाइल में भेजा जाता है और प्रति एप्लिकेशन अपस्ट्रीम / स्थान फ़ाइलों की एक जोड़ी:

  • /etc/nginx/conf.d/common-proxies.conf:

    include /upstreams/*.conf;
    
    server {
    include /locations/*.conf
    }
    
  • /etc/nginx/locations/backend1.conf

    location /backend1/ {
      upstream http://backend1;
    }
    
  • /etc/nginx/locations/backend2.conf

    location /backend2/ {
      upstream http://backend2;
    }
    
  • /etc/nginx/upstreams/backend1.conf

    upstream backend1 {
      http://localhost:8989;
    }
    
  • /etc/nginx/upstreams/backend2.conf

    upstream backend2 {
      http://localhost:8990;
    }
    

1
क्या यह एक टाइपो है? "के बदले: नदी के ऊपर" 8990 सर्वर स्थानीय होस्ट "होना चाहिए : 8990 स्थानीय होस्ट ,"। यहां देखें: nginx.org/en/docs/http/ngx_http_upstream_module.html
mbdev

ऐसा लगता है कि आपके द्वारा लिंक किए गए दस्तावेज़ से लगता है कि ब्लॉक के अंदर प्रत्येक कमांड एक अर्ध स्तंभ द्वारा समाप्त हो गई है। जैसे upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }। इसके अलावा, यह ;:)
oDDsKooL

मेरा मतलब था कि कीवर्ड 'सर्वर' पते से पहले गायब है। अर्धविराम भाग को अनदेखा करें।
mbdev

1

एक http ब्लॉक में कई सर्वर बच्चे हो सकते हैं। हालाँकि, nginx अनुरोध को संसाधित करने के लिए एक सर्वर ब्लॉक का चयन करता है। इसलिए, अनुरोध कभी भी बैकेंड 2 स्थान को नहीं देखता है क्योंकि यह पहले सर्वर ब्लॉक के खिलाफ मेल खाता है।


आप शायद यह मेरा locationनिर्देश है कि बेकार है और backend2 के लिए अनुरोध को पकड़ो?
oDDsKooL

या क्या यह है कि मुझे दोनों serverब्लॉकों को अलग करने का एक तरीका चाहिए जब निगनेक्स serverअनुरोध को अग्रेषित करने के लिए उपयुक्त लगता है ?
oDDsKooL

दोनों लोकेशन ब्लॉक एक ही सर्वर ब्लॉक के भीतर होने चाहिए।
chrskly
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.