nginx dividir arquivo de configuração grande

8

Meu arquivo de configuração padrão do nginx está se tornando enorme. Eu gostaria de dividi-lo em arquivos de configuração menores, cada um incluindo apenas um, no máximo quatro locais para cada arquivo, para que eu possa ativá-los / desativá-los rapidamente.

O arquivo real é assim:

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

agora, se eu quiser dividir isso para ter apenas alguns locais em cada arquivo (locais que pertençam juntos), qual seria uma maneira correta de fazer isso sem causar caos (como declarar root em cada arquivo, por caminho que o nginx tenta encontrar arquivos)?

    
por oliverjkb 23.07.2015 / 16:21

2 respostas

12

Provavelmente você está procurando pela função include do Nginx: link

Você pode usá-lo assim:

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

include também aceita curingas para que você também possa escrever

include include/*.conf;

para incluir todos os arquivos * .conf no diretório include .

    
por 23.07.2015 / 16:43
4

Você pode criar pastas de sites com

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

# Em seguida, divida seu grande arquivo your_config.conf em arquivos menores em sites-available/ com:

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\) /_/g'|xargs);
  if [[ -e $new.conf ]] ; then
    echo "" >>$new.conf
    cat "$i">>$new.conf
    rm "$i"
  else
    mv "$i" $new.conf
  fi
done

(aprimorei isso a partir dessa fonte: link )

Certifique-se de adicionar isso no final dentro do bloco http do seu /etc/nginx/conf.d/*.conf; :

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

Nota: os comentários fora dos blocos server são cortados na parte inferior de cada arquivo, portanto, não deve haver comentários ANTES de um bloco server . mova comentários na primeira linha do lado de dentro do bloco.

    
por 28.07.2016 / 13:16