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 намагається знайти файли)?

Відповіді:


24

Ви, ймовірно, шукаєте 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/*.conf;

щоб включити кожен * .conf файл у каталог, включати .


Я вже вважав це, але пропустив його, оскільки це означатиме редагування вмісту файлів, а не просто від’єднання файлів у папці, що підтримує сайти.
oliverjkb

@ardukar, тож ваше рішення полягало у використанні папки із підтримкою сайтів?
Марк Стосберг

Я трохи розгублений зараз ...
FLXN

Вибачте, що відповіли так пізно! Здається, я не прочитав сповіщення .. -.- Я вже використовую рішення FLXN. Але це не робить мене щасливим. Оскільки я будую сервер для меншої компанії, де адміністрація здійснюється виключно через браузер, я не хотів би вносити зміни всередині файлу. Якщо послуга відключена через браузер, я хочу, щоб підпапка (скажімо, "розташування") у nginx також була деактивована, тому від'єднання конфігураційного файлу в папці з включеними сайтами здавалося б найкращою ідеєю.
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блоком не повинно бути коментарів . перемістіть коментарі в першому рядку ВНУТРИ блок замість цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.