Nginx Split große Konfigurationsdatei

16

Meine Nginx-Standardkonfigurationsdatei wird riesig. Ich möchte es in kleinere Konfigurationsdateien aufteilen, von denen jede nur einen, maximal vier Speicherorte für jede Datei enthält, damit ich sie schnell aktivieren / deaktivieren kann.

Die aktuelle Datei sieht folgendermaßen aus:

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

Nun, wenn ich das aufteilen möchte, um nur ein paar Speicherorte in jeder Datei zu haben (Speicherorte, die zusammen gehören), was wäre ein geeigneter Weg, dies zu tun, ohne Chaos zu verursachen (wie Root in jeder Datei zu deklarieren, also einen seltsamen Pfad wie diesen Nginx zu haben versucht, Dateien zu finden)?

oliverjkb
quelle

Antworten:

22

Sie suchen wahrscheinlich nach der includeFunktion von Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Du kannst es so benutzen:

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

include akzeptiert auch Platzhalter, sodass Sie auch schreiben können

include include/*.conf;

um jede * .conf-Datei in das Verzeichnis include aufzunehmen .

FLXN
quelle
Ich habe dies bereits in Betracht gezogen, es aber übersprungen, da es bedeuten würde, den Inhalt der Dateien zu bearbeiten, anstatt nur die Verknüpfung der Dateien im sites-fähigen Ordner aufzuheben.
Oliverjkb
@ardukar war Ihre Lösung also, den sites-enabled Ordner zu verwenden?
Mark Stosberg
Ich bin gerade ein wenig verwirrt ...
FLXN
Entschuldigung, dass Sie so spät geantwortet haben! Scheint, als hätte ich die Benachrichtigung nicht gelesen. -.- Ich verwende bereits die FLXN-Lösung. Aber das freut mich nicht. Da ich einen Server für ein kleineres Unternehmen baue, bei dem die Administration ausschließlich über den Browser erfolgt, möchte ich keine Änderungen in einer Datei vornehmen. Wenn ein Dienst über einen Browser deaktiviert wird, möchte ich, dass der Unterordner (z. B. 'location') in nginx ebenfalls deaktiviert wird. Daher schien es die beste Idee zu sein, die Verknüpfung der Konfigurationsdatei im sites-enabled-Ordner aufzuheben.
oliverjkb
5

Sie können Site-Ordner mit erstellen

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

# Und dann teilen Sie Ihre große your_config.confDatei in kleinere Dateien auf sites-available/mit:

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

(Ich habe dies aus dieser Quelle verbessert: /programming//a/9635153/1069083 )

Stellen Sie sicher, dass Sie dies am Ende in den httpBlock Ihres /etc/nginx/conf.d/*.conf;:

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

Hinweis: Kommentare außerhalb der serverBlöcke werden am Ende jeder Datei abgeschnitten, daher sollten vor einem serverBlock keine Kommentare angezeigt werden . Verschieben Sie stattdessen Kommentare in der ersten Zeile IN den Block.

rubo77
quelle