我有一个由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
}

有可能做那样的事吗?
最佳答案
正如其他人所说,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 / config管理的额外复杂性,这是一种低开销的方式,并且由于配置是动态的,仍然允许您向外扩展而不必担心盒子的IP地址.但是,如果您的架构发生变化,那么配置管理将非常有用.

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。