Назад | Перейти на главную страницу

Nginx - конфигурация нескольких серверов

У меня есть кластер из 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-адресе коробки. Но если ваша архитектура изменится, управление конфигурациями будет очень полезным.