nginx dividió el archivo de configuración grande


17

Mi archivo de configuración predeterminado de nginx se está volviendo enorme. Me gustaría dividirlo en archivos de configuración más pequeños, cada uno con solo una, un máximo de 4 ubicaciones para cada archivo, de modo que pueda habilitarlos / deshabilitarlos rápidamente.

El archivo real se ve así:

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

ahora, si quiero dividir eso para tener solo unas pocas ubicaciones en cada archivo (ubicaciones que pertenecen juntas), ¿cuál sería una forma adecuada de hacerlo sin causar caos (como declarar root en cada archivo, por lo tanto, tener una ruta extraña es ese nginx intenta encontrar archivos)

Respuestas:


23

Probablemente esté buscando la includefunción de Nginx : http://nginx.org/en/docs/ngx_core_module.html#include

Puedes usarlo así:

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

include también acepta comodines para que también puedas escribir

include include/*.conf;

para incluir todos los archivos * .conf en el directorio include .


Ya consideré esto, pero lo omití, porque significaría editar el contenido de los archivos, en lugar de simplemente desvincular archivos en la carpeta habilitada para sitios.
oliverjkb

@ardukar, ¿su solución fue utilizar la carpeta habilitada para sitios?
Mark Stosberg

Estoy un poco confundido en este momento ...
FLXN

Perdón por responder tan tarde! Parece que no leí la notificación .. -.- Ya estoy usando la solución de FLXN. Pero eso no me hace feliz. Como estoy creando un servidor para una empresa más pequeña, donde la administración se realiza únicamente a través del navegador, prefiero no hacer cambios dentro de un archivo. Si un servicio se desactiva a través del navegador, quiero que la subcarpeta (digamos 'ubicación') en nginx también se desactive, por lo tanto, desvincular el archivo de configuración en la carpeta habilitada para sitios parece ser la mejor idea.
oliverjkb

6

Puede crear carpetas del sitio con

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

# Y luego divida su your_config.confarchivo grande en archivos más pequeños 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

(Mejoré esto de esta fuente: /programming//a/9635153/1069083 )

Asegúrese de agregar esto al final dentro del httpbloque de su /etc/nginx/conf.d/*.conf;:

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

Nota: los comentarios fuera de los serverbloques se cortan en la parte inferior de cada archivo, por lo que no debe haber comentarios ANTES de un serverbloque. mover comentarios en la primera línea DENTRO del bloque en su lugar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.