У меня есть кластер из 8 независимых веб-серверов, на каждом из которых работает nginx. Все они размещают одни и те же веб-сайты и синхронизируются с rsync.
Кроме того, к каждому серверу подключено 8 разных IP-адресов.
Мои размещенные веб-сайты направляются на разные IP-адреса в соответствии с некоторой бизнес-логикой.
Есть ли способ синхронизировать файл конфигурации между всеми серверами, но изменять только IP-адреса на каждом из них?
Например, на каждом сервере должен быть nginx.conf с:
@IP1 = '1.1.1.1';
@IP2 = '2.2.2.2';
include 'sites.conf';
а затем синхронизируйте sites.conf и пусть это будет что-то вроде:
server {
listen @IP1:80;
... //more configurations here
}
Возможно ли такое сделать?
Как отмечали другие, nginx не поддерживает это.
По возможности может быть использование отдельных файлов конфигурации для каждого из отдельных хостов и непосредственная ссылка на сценарий запуска nginx для этого файла конфигурации.
Метод 1: несколько файлов конфигурации
/etc/init.d/nginx будет делать что-то вроде:
MyIP=`# some code to get my ip address or local ID`
nginx -c $PATH_TO_NGINX/${MyIP}.conf
Таким образом, вы распределяете одни и те же файлы для всех, но каждый сервер будет ссылаться только на свой собственный файл конфигурации.
Метод 2: динамически обновлять файл конфигурации при запуске / перезапуске службы
MyIP=`# some code to get my ip address or local ID`
updateconfig($MyIP,$TEMPLATECONFIG,$LOCALCONFIG) # Some function which will take a template config distributed out and replace the IP-PLACEHOLDERS with the box's actual IP address
nginx -c $PATH_TO_NGINX/$LOCALCONFIG
Таким образом, вы управляете только одним шаблоном файла конфигурации, который обновляется автоматически при перезапуске / перезагрузке.
Если вам еще не нужна дополнительная сложность управления Puppet / конфигурацией, это способ с низкими накладными расходами, и поскольку конфигурация является динамической, по-прежнему позволяет масштабировать, не беспокоясь об IP-адресе коробки. Но если ваша архитектура изменится, управление конфигурациями будет очень полезным.