У меня есть сервер с nginx, на котором работает сайт, который в ближайшем будущем должен быть заменен новым.
Чтобы быть готовым к этому дню - я готовлю все конфигурации, необходимые для запуска нового сайта.
Я бы хотел иметь глобальную переменную в главном nginx.conf
которые содержат строку (например, 'old'
или 'new'
представляющий сайт, который должен быть активен в основном домене example.com
пока другой сайт включен other.example.com
.
Я попытался:
nginx.conf
http{
...
set $site_in_production 'new';
...
include /etc/nginx/conf.c/*.conf;
}
/etc/nginx/conf.d/example.com.conf
server{
...
if($site_in_production='new'){
server_name other.example.com;
} else {
server_name example.com www.example.com;
}
...
}
/etc/nginx/conf.d/new.example.com.conf
server{
...
if($site_in_production='new'){
server_name example.com www.example.com;
} else {
server_name other.example.com;
}
...
}
Но при запуске configtest я получаю эту ошибку:
nginx: [emerg] "set" directive is not allowed here in /etc/nginx/nginx.conf:XX
так что я думаю, что set
директива не допускается за пределами server
блокировать
Есть ли способ достичь этой функциональности с помощью одной переменной во всех файлах конфигурации nginx?
Большое спасибо!
Просто сделайте сценарий. Конечно, элегантное решение, встроенное в nginx, было бы неплохо ... но давайте не будем забывать об инструментах, которые предоставляет нам * nix:
#!/bin/bash
for i in /etc/nginx/conf.d/*;
do
sed -i 's/server_name example.com www.example.com;/server_name other.example.com;/g' "$i";
done
... Возможно, вам придется избегать этих точек с запятой .. Не уверен ...