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