क्या आप एक सर्वर के स्थानों को कई nginx कॉन्फ़िगर फ़ाइलों में परिभाषित कर सकते हैं?


14

मेरे पास एक ही होस्ट पर कई रूबी एप्स चल रहे हैं:

~/app1
~/app2
~/app3

और मैं इन ऐप्स को उप-निर्देशिकाओं का उपयोग करके nginx प्रॉक्सी करना चाहता हूं जैसे:

   http://example.com/app1
   http://example.com/app2
   http://example.com/app3

मुझे उत्सुकता है अगर nginx मुझे एकाधिक फ़ाइलों में इन स्थानों को परिभाषित करने में सक्षम होने का समर्थन करता है, ताकि मैं सभी एप्लिकेशन के लिए एक अखंड कॉन्फ़िगरेशन फ़ाइल रखने के बजाय ऐप के साथ प्रत्येक कॉन्फ़िगरेशन रख सकूं:

~/app1/nginx.conf
~/app2/nginx.conf
~/app3/nginx.conf

conflicting server name "example.com" on [::]:80, ignoredनिम्न में से प्रत्येक के साथ 3 कॉन्फिग फाइलों के साथ एक ही स्थान निर्देश के साथ सर्वर को परिभाषित करने की मेरी भोली कोशिश :

upstream app1 { server 127.0.0.1:4567; }
server {
  listen      [::]:80;
  listen      80;
  servername  example.com
  location    /app1 {
     proxy_pass  http://app1;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header X-Forwarded-Port $server_port;
     proxy_set_header X-Request-Start $msec;
  }
}

क्या इस तरह से कॉन्फिग को व्यवस्थित करने का कोई तरीका है?

जवाबों:


9

आप बाहरी विन्यास को शामिल कर सकते हैं:

include /path/to/config1.conf;
include /path/to/config2.conf;
include /path/to/confdir/*.conf;

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;
}

और अलग विन्यास के अंदर आप किसी भी मान्य कोड ब्लॉक का उपयोग कर सकते हैं:

upstream app1 {
    server 127.0.0.1:8080;
}

location /app1 {
    proxy_pass http://app1;
}

5
क्या यह वास्तव में काम करता है? क्या सर्वर मॉड्यूल ब्लॉक के बाहर अपस्ट्रीम मॉड्यूल की आवश्यकता नहीं है?
कर्ली

5
ऐसा लगता है कि सर्वर ब्लॉक के बाहर स्थान निर्देश की अनुमति नहीं है। कम से कम मेरे लिए, नगीनक्स रिपोर्ट "location" directive is not allowed here
अलेक्जेंडर अमेलकिन

हाँ ... मैं प्रति एप्लिकेशन कई फ़ाइलों के बिना ठीक से करने का एक सरल तरीका नहीं देखता: एक जो सर्वर ब्लॉक के अंदर काम करेगा, एक जो बाहर काम करेगा। मैं लचीलेपन का अनुमान लगाता हूं और इसे साफ करने के लिए वाइल्डकार्ड का इस्तेमाल किया जा सकता है: include /etc/nginx/above_server.d/*औरinclude /etc/nginx/in_server.d/*
जेटीन

1
यह उत्तर गलत है
अमीरहोसिन

11

मुझे विश्वास है, आप इस विन्यास का उपयोग कर सकते हैं:

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;

    include /path/to/applications/*/nginx.conf;
}

और फिर प्रत्येक अनुप्रयोग की निर्देशिका में इस तरह पुनर्निर्देशन को कॉन्फ़िगर करें:

location    /app1 {
    proxy_pass  http://app1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
}

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