web-dev-qa-db-fra.com

nginx split grand fichier de configuration

Mon fichier de configuration par défaut nginx devient énorme. Je voudrais le diviser en fichiers de configuration plus petits, chacun comprenant seulement un, maximum 4 emplacements pour chaque fichier, afin que je puisse 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 une bonne façon de le faire sans causer de chaos (comme déclarer la racine dans chaque fichier, donc avoir un chemin étrange qui est nginx essaie de trouver des fichiers)?

19
oliverjkb

Vous recherchez probablement la fonction include 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 , incluez .

27
FLXN

Vous pouvez créer des dossiers de site avec

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

# Et puis divisez votre grand your_config.conf fichier en fichiers plus petits en sites-available/ avec:

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: https://stackoverflow.com/a/9635153/106908 )

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

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

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

 # don't put comments here
 server {
    # put your comments about domain xyz.org here
    listen 80;
    server_name xyz.org;
    ...
7
rubo77