我有一个8个独立的Web服务器集群,每个都运行nginx。 他们都托pipe相同的网站,并与rsync同步。
另外,每台服务器都有8个不同的IP地址。
根据一些业务逻辑,我托pipe的网站正在被定向到不同的IP。
有什么办法可以在所有服务器之间同步configuration文件,但只更改每个IP上的configuration文件?
例如,在每个服务器上都有一个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不支持。
可能性可能是为每个单独的主机使用单独的configuration文件,并让nginx启动脚本直接引用该configuration文件。
方法1:多个configuration文件
/etc/init.d/nginx会做类似的事情:
MyIP=`# some code to get my ip address or local ID` nginx -c $PATH_TO_NGINX/${MyIP}.conf
通过这种方式,您可以将所有文件同步到同一个文件中,但每个服务器只会引用自己的configuration文件。
方法2:在服务启动/重新启动时dynamic更新configuration文件
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
通过这种方式,您只能pipe理一个configuration文件模板,在重新启动/重新加载时自我更新。
如果您不需要Puppet / configpipe理的额外复杂性,那么这是一个低成本的方法,而且由于configuration是dynamic的,所以仍然允许您向外扩展,而不用担心该框的IP地址。 但是如果你的架构改变了,那么configurationpipe理将会非常有帮助。