nginx बड़ी कॉन्फ़िगरेशन फ़ाइल को विभाजित करता है


17

मेरी nginx डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल बहुत बड़ी हो रही है। मैं इसे छोटी कॉन्फिग फाइलों में विभाजित करना चाहूंगा, प्रत्येक में केवल एक ही, प्रत्येक फाइल के लिए अधिकतम 4 स्थान, ताकि मैं उन्हें जल्दी से सक्षम / अक्षम कर सकूं।

वास्तविक फ़ाइल इस तरह दिखती है:

server {
    listen 80 default_server;
    root /var/www/

    location /1 {
        config info...;
    }

    location /2 {
        config info....;
    }        
    location /abc {
        proxy_pass...;
    }

    location /xyz {
        fastcgi_pass....;
    }
    location /5678ab {
        config info...;
    }

    location /admin {
        config info....;
    }

अब, यदि मैं विभाजित करना चाहता हूं कि प्रत्येक फ़ाइल में केवल कुछ स्थान हैं (एक साथ संबंधित स्थान), तो अराजकता पैदा किए बिना इसे करने का एक उचित तरीका क्या होगा (जैसे प्रत्येक फ़ाइल में रूट घोषित करना, इसलिए अजीब पथ का नगण्य होना फ़ाइलें खोजने की कोशिश करता है)?

जवाबों:


24

आप शायद Nginx के includeफ़ंक्शन की तलाश कर रहे हैं : http://nginx.org/en/docs/ngx_core_module.html#include

आप इसे इस तरह से उपयोग कर सकते हैं:

server {
  listen 80;
  server_name example.com;
  […]
  include conf/location.conf;
}

वाइल्डकार्ड को भी स्वीकार करें ताकि आप भी लिख सकें

include include/*.conf;

निर्देशिका में हर * .conf फ़ाइल को शामिल करने के लिए


मैंने इस पर पहले ही विचार कर लिया था, लेकिन इसे छोड़ दिया, क्योंकि इसका मतलब होगा साइटों-सक्षम फ़ोल्डर में फ़ाइलों को अनलिंक करने के बजाय, फ़ाइलों की सामग्री को संपादित करना।
ओलिवरजैब

@ardukar तो आपका समाधान साइटों-सक्षम फ़ोल्डर का उपयोग करना था?
मार्क स्टोसबर्ग

मैं अभी थोड़ा उलझन में हूँ ...
FLXN

इतनी देर से जवाब देने के लिए क्षमा करें! ऐसा लगता है कि मैंने अधिसूचना नहीं पढ़ी है .. -.- मैं पहले से ही FLXN के समाधान का उपयोग कर रहा हूं। लेकिन यह मुझे खुश नहीं करता है। चूंकि मैं एक छोटी कंपनी के लिए एक सर्वर का निर्माण कर रहा हूं, जहां प्रशासन पूरी तरह से ब्राउज़र के माध्यम से किया जाता है, इसलिए मैं एक फ़ाइल के अंदर बदलाव नहीं करना चाहता हूं। यदि कोई सेवा ब्राउज़र के माध्यम से निष्क्रिय है, तो मैं चाहता हूं कि nginx में सबफ़ोल्डर ('लोकेशन') भी कहा जाए, इसलिए साइट-सक्षम फ़ोल्डर में कॉन्फ़िग फ़ाइल को अनलिंक करना सबसे अच्छा विचार था।
oliverjkb

6

आप के साथ साइट फ़ोल्डर बना सकते हैं

mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

# और फिर अपनी बड़ी your_config.confफाइल को छोटी फाइलों में विभाजित करें sites-available/:

YOURCONF="/etc/nginx/conf.d/your_config.conf"
cd /etc/nginx
mkdir -p sites-available sites-enabled
cd  sites-available/
csplit "$YOURCONF" '/^\s*server\s*{*$/' {*}
for i in xx*; do
  new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
  if [[ -e $new.conf ]] ; then
    echo "" >>$new.conf
    cat "$i">>$new.conf
    rm "$i"
  else
    mv "$i" $new.conf
  fi
done

(मैंने इसे इस स्रोत से बढ़ाया: /programming//a/9635153/1069083 )

httpअपने ब्लॉक के अंदर अंत में इसे जोड़ना सुनिश्चित करें /etc/nginx/conf.d/*.conf;:

include /etc/nginx/sites-enabled/*.conf; 

नोट: serverब्लॉक के बाहर की टिप्पणियाँ प्रत्येक फ़ाइल के निचले भाग में कट जाती हैं, इसलिए किसी भी serverब्लॉक से पहले कोई टिप्पणी नहीं होनी चाहिए । पहली पंक्ति में टिप्पणियों को ब्लॉक के बजाय अंदर डालें।

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