nginx split grand fichier de configuration

17

Mon fichier de configuration par défaut nginx devient énorme. Je voudrais le diviser en fichiers de configuration plus petits, chacun ne comprenant qu'un seul, 4 emplacements maximum pour chaque fichier, afin de pouvoir les activer / désactiver rapidement.

Le fichier réel ressemble à ceci:

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

maintenant, si je veux diviser cela pour n'avoir que quelques emplacements dans chaque fichier (emplacements appartenant ensemble), quelle serait la bonne façon de le faire sans provoquer de chaos (comme déclarer la racine dans chaque fichier, donc avoir un chemin étrange qui est nginx essaie de trouver des fichiers)?

oliverjkb
la source

Réponses:

23

Vous recherchez probablement la includefonction de Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Vous pouvez l'utiliser comme ceci:

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

include accepte également les caractères génériques afin que vous puissiez également écrire

include include/*.conf;

pour inclure chaque fichier * .conf dans le répertoire include .

FLXN
la source
J'ai déjà considéré cela, mais je l'ai ignoré, car cela signifierait modifier le contenu des fichiers, plutôt que de simplement dissocier les fichiers du dossier activé pour les sites.
oliverjkb
@ardukar donc votre solution était d'utiliser le dossier compatible avec les sites?
Mark Stosberg
Je suis un peu confus en ce moment ...
FLXN
Désolé d'avoir répondu si tard! On dirait que je n'ai pas lu la notification .. -.- J'utilise déjà la solution de FLXN. Mais cela ne me rend pas heureux. Étant donné que je crée un serveur pour une petite entreprise, où l'administration se fait uniquement via le navigateur, je préfère ne pas apporter de modifications à l'intérieur d'un fichier. Si un service est désactivé via un navigateur, je veux que le sous-dossier (par exemple, `` emplacement '') dans nginx soit également désactivé, donc dissocier le fichier de configuration dans le dossier activé pour les sites semblait être la meilleure idée.
oliverjkb
6

Vous pouvez créer des dossiers de site avec

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

# Et puis divisez votre gros your_config.conffichier en fichiers plus petits en 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

(J'ai amélioré cela à partir de cette source: /programming//a/9635153/1069083 )

Assurez-vous d'ajouter ceci à la fin à l'intérieur du httpbloc de votre /etc/nginx/conf.d/*.conf;:

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

Remarque: les commentaires en dehors des serverblocs sont coupés au bas de chaque fichier, il ne doit donc pas y avoir de commentaires AVANT un serverbloc. déplacez plutôt les commentaires dans la première ligne à l'intérieur du bloc.

rubo77
la source