Nginx - 多服务器配置

Nginx - 多服务器配置

我有一个由 8 个独立 Web 服务器组成的集群,每个服务器都运行 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
}

可以做这样的事吗?

答案1

正如其他人指出的那样,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

通过这种方式,您可以通过 rsync 向每个人发送相同的文件,但每个服务器只会引用他们自己的配置文件。

方法 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 地址。但如果您的架构发生变化,那么配置管理将非常有帮助。

相关内容