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

17

Мой файл конфигурации 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....;
    }

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

oliverjkb
источник

Ответы:

23

Возможно, вы ищете includeфункцию Nginx : 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 файл в каталог include .

FLXN
источник
Я уже рассмотрел это, но пропустил его, потому что это означало бы редактировать содержимое файлов, а не просто отсоединять файлы в папке с включенными сайтами.
oliverjkb
@ardukar, так что вы решили использовать папку с включенными сайтами?
Марк Стосберг
Я немного смущен прямо сейчас ...
FLXN
Извините за ответ так поздно! Похоже, я не читал уведомление .. -.- Я уже использую решение FLXN. Но это не делает меня счастливым. Поскольку я создаю сервер для небольшой компании, где администрирование осуществляется исключительно через браузер, я бы не хотел вносить изменения в файл. Если служба деактивируется через браузер, я хочу, чтобы подпапка (скажем, «location») в nginx также была деактивирована, поэтому лучшим вариантом будет отсоединение файла конфигурации в папке sites-enabled.
oliverjkb
6

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

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

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

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

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

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

rubo77
источник