Назад | Перейти на главную страницу

nginx разделил большой файл конфигурации

Мой файл конфигурации nginx по умолчанию становится огромным. Я хотел бы разделить его на более мелкие файлы конфигурации, каждый из которых содержит только одно, максимум 4 местоположения для каждого файла, чтобы я мог быстро их включить / отключить.

Фактический файл выглядит так:

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

теперь, если я хочу разделить это, чтобы иметь только несколько местоположений в каждом файле (местоположения, принадлежащие друг другу), что было бы правильным способом сделать это, не вызывая хаоса (например, объявление root в каждом файле, следовательно, наличие странного пути, который nginx пытается найти файлы)?

Вы, вероятно, ищете Nginx include функция: http://nginx.org/en/docs/ngx_core_module.html#include

Вы можете использовать это так:

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

include также принимает подстановочные знаки, поэтому вы также можете написать

include include/*.conf;

для включения каждого файла * .conf в каталог включают.

Вы можете создавать папки сайта с помощью

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

# А затем разделите большой your_config.conf файл на более мелкие файлы в 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

(Я улучшил это из этого источника: https://stackoverflow.com/a/9635153/1069083 )

Не забудьте добавить это в конце внутри http блок вашего/etc/nginx/conf.d/*.conf;:

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

Примечание: комментарии вне server блоки разрезаются в нижней части каждого файла, поэтому не должно быть комментариев ДО server блок. Вместо этого переместите комментарии в первую строку ВНУТРИ блока, например:

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