我的工作运行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
这些不是服务器被部署到但在持有其本地重新配置,并动态地基于它们的(有限的)输入客户的,而网络设备。我对Ansible有一些经验,我当然可以使用类似的东西。但这对我们的配置系统的工作方式有很大的改变,而Apache解决方案则不然。我可能会接受你的答案,但我想我不会收到一个完美的简单答案。干杯 – kine 2015-02-25 15:14:05
哦,有可能是你可以做的事......将每个部分拆分成不同的文件,并使用include重用它。请参阅http://httpd.apache.org/docs/current/en/mod/core.html#include – ROunofF 2015-02-26 18:16:39