我有一个由8个独立Web服务器组成的集群,每个服务器都运行Nginx.
他们都托管相同的网站,并与rsync同步.
此外,每个服务器都附加了8个不同的IP地址.
根据一些业务逻辑,我的托管网站被定向到不同的IP.
有没有什么方法可以在所有服务器之间同步配置文件,但是只更改每个服务器上的IP?
@IP1 = '1.1.1.1';
@IP2 = '2.2.2.2';
include 'sites.conf';
然后同步sites.conf并让它像:
server {
listen @IP1:80;
... //more configurations here
}
有可能做那样的事吗?
最佳答案
正如其他人所说,Nginx不支持这一点.
可能的可能是为每个单独的主机使用单独的配置文件,并让Nginx启动脚本直接引用该配置文件.
/etc/init.d/Nginx会做类似的事情:
MyIP=`# some code to get my ip address or local ID`
Nginx -c $PATH_TO_Nginx/${MyIP}.conf
通过这种方式,您可以将相同的文件同步到每个人,但每个服务器只会引用自己的配置文件.
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地址.但是,如果您的架构发生变化,那么配置管理将非常有用.