2015-02-24 20 views
0

我的工作运行Apache的一个产品,我试图使配置更干 - 现在有,它们会在不同的情况下装载许多不同的虚拟主机CONFIGS但是90%相同的,当需要做出改变时,这是非常繁琐的。我不认为阿帕奇真的是在设计这种动态的环境,但无论如何,在这里我是无论如何。动态禁用/省略的Apache配置指令(DRY)

因此,我首先转向了环境变量 - 我有一个小引导脚本,用于确定必要的配置并将变量转储到/etc/apache2/envvars(在Ubuntu上由apache2ctl和类似工具加载)。这让我做这样的事情:

envvars

export MYKEY='/path/to/mykey' 
export MYCERT='/path/to/mycert' 
export MYBUNDLE='/path/to/mybundle' 

虚拟主机配置:

SSLCertificateKeyFile ${MYKEY} 
SSLCertificateFile ${MYCERT} 
SSLCACertificateFile ${MYBUNDLE} 

这工作得很好,但只只要MYKEY,&人,是非。引用非空文件的空变量。例如,在某些配置中,不需要CA捆绑包,因此我试图将MYBUNDLE指向/dev/null。 Apache认为这是'语法错误',因为/dev/null是一个空文件,并拒绝启动。

我的问题:有没有什么办法可以动态禁用/省略Apache的配置配置指令(根据环境变量或类似的机制),而不必保留单独的文件中为每一个可能的场景?

替代问题:有没有什么办法可以给Apache提供一个空的值/证书给这个特定的指令(SSLCACertificateFile),Apache的方式不会认为是无效的?

的Ubuntu 12.04.5
的Apache 2.2.22

回答

1

看起来你要的是你的配置管理工具。

现在,我不知道你如何部署常常但你可能可以使产生你的模板,你的脚本?

如果你有更大的需求,也许考虑自动化软件和使用某种类型的模板?我想这样的厨师(https://www.chef.io/)或木偶(http://puppetlabs.com/)或...他们都支持模板,您可以根据对不同的值的环境/服务器/情绪提供价值。

+0

这些不是服务器被部署到但在持有其本地重新配置,并动态地基于它们的(有限的)输入客户的,而网络设备。我对Ansible有一些经验,我当然可以使用类似的东西。但这对我们的配置系统的工作方式有很大的改变,而Apache解决方案则不然。我可能会接受你的答案,但我想我不会收到一个完美的简单答案。干杯 – kine 2015-02-25 15:14:05

+0

哦,有可能是你可以做的事......将每个部分拆分成不同的文件,并使用include重用它。请参阅http://httpd.apache.org/docs/current/en/mod/core.html#include – ROunofF 2015-02-26 18:16:39