nginx podzielił duży plik konfiguracyjny

17

Mój domyślny plik konfiguracyjny nginx staje się ogromny. Chciałbym podzielić go na mniejsze pliki konfiguracyjne, z których każdy zawiera tylko jedną, maksymalnie 4 lokalizacje dla każdego pliku, dzięki czemu mogę je szybko włączyć / wyłączyć.

Rzeczywisty plik wygląda następująco:

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....;
    }

teraz, jeśli chcę podzielić to, aby mieć tylko kilka lokalizacji w każdym pliku (lokalizacje należące do siebie), co byłby właściwy sposób, aby to zrobić bez powodowania chaosu (np. deklarowanie katalogu głównego w każdym pliku, stąd dziwna ścieżka to nginx próbuje znaleźć pliki)?

oliverjkb
źródło

Odpowiedzi:

24

Prawdopodobnie szukasz includefunkcji Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Możesz użyć tego w następujący sposób:

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

include również akceptuje symbole wieloznaczne, dzięki czemu można również pisać

include include/*.conf;

aby dołączyć każdy plik * .conf do katalogu include .

FLXN
źródło
Rozważyłem to już, ale pominąłem, ponieważ oznaczałoby to edycję zawartości plików, a nie tylko odłączanie plików w folderze obsługującym witryny.
oliverjkb
@ardukar, więc Twoim rozwiązaniem było użycie folderu obsługującego witryny?
Mark Stosberg,
Jestem teraz trochę zdezorientowany ...
FLXN,
Przepraszamy za odpowiedź tak późno! Wygląda na to, że nie przeczytałem powiadomienia. -.- Korzystam już z rozwiązania FLXN. Ale to mnie nie cieszy. Ponieważ buduję serwer dla mniejszej firmy, gdzie administracja odbywa się wyłącznie za pośrednictwem przeglądarki, wolałbym nie dokonywać zmian w pliku. Jeśli usługa jest dezaktywowana przez przeglądarkę, chcę również dezaktywować podfolder (powiedz „lokalizacja”) w nginx, dlatego rozłączenie pliku konfiguracyjnego w folderze obsługującym witryny wydaje się być najlepszym pomysłem.
oliverjkb
6

Możesz tworzyć foldery witryny za pomocą

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

# A następnie podziel swój duży your_config.confplik na mniejsze pliki za sites-available/pomocą:

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

(Ulepszyłem to z tego źródła: /programming//a/9635153/1069083 )

Pamiętaj, aby dodać to na końcu wewnątrz httpbloku /etc/nginx/conf.d/*.conf;:

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

Uwaga: komentarze poza serverblokami są wycinane na dole każdego pliku, więc nie powinno być żadnych komentarzy PRZED serverblokiem. zamiast tego przenieś komentarze w pierwszym wierszu WEWNĄTRZ bloku.

rubo77
źródło