nginx ha diviso il file di configurazione di grandi dimensioni


17

Il mio file di configurazione predefinito di nginx sta diventando enorme. Vorrei dividerlo in file di configurazione più piccoli, ognuno dei quali include solo uno, massimo 4 posizioni per ciascun file, in modo da poterli abilitare / disabilitare rapidamente.

Il file effettivo è simile al seguente:

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

ora, se voglio dividerlo per avere solo poche posizioni in ogni file (posizioni che appartengono insieme), quale sarebbe un modo corretto per farlo senza causare caos (come dichiarare root in ogni file, quindi avere un percorso strano è quel nginx cerca di trovare i file)?

Risposte:


23

Probabilmente stai cercando la includefunzione di Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Puoi usarlo in questo modo:

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

include accetta anche caratteri jolly in modo da poter scrivere anche

include include/*.conf;

per includere tutti i file * .conf nella directory include .


L'ho già considerato, ma l'ho saltato, perché significherebbe modificare il contenuto dei file, piuttosto che scollegare i file nella cartella abilitata per i siti.
oliverjkb,

@ardukar quindi la tua soluzione è stata quella di utilizzare la cartella abilitata per i siti?
Mark Stosberg,

Sono un po 'confuso in questo momento ...
FLXN,

Ci scusiamo per la risposta così tardi! Sembra che non abbia letto la notifica .. -.- Sto già usando la soluzione di FLXN. Ma questo non mi rende felice. Dal momento che sto costruendo un server per un'azienda più piccola, in cui l'amministrazione avviene esclusivamente tramite browser, preferirei non voler apportare modifiche all'interno di un file. Se un servizio è disattivato tramite browser, voglio che anche la sottocartella (diciamo 'location') in nginx sia disattivata, quindi scollegare il file di configurazione nella cartella abilitata per i siti sembra essere l'idea migliore.
oliverjkb,

6

È possibile creare cartelle del sito con

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

# E quindi dividi il tuo your_config.conffile di grandi dimensioni in file più piccoli in sites-available/con:

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

(Ho migliorato questo da questa fonte: /programming//a/9635153/1069083 )

Assicurati di aggiungere questo alla fine all'interno del httpblocco del tuo /etc/nginx/conf.d/*.conf;:

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

Nota: i commenti all'esterno dei serverblocchi vengono tagliati nella parte inferiore di ogni file, quindi non dovrebbero esserci commenti PRIMA di un serverblocco. sposta invece i commenti nella prima riga all'interno del blocco.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.