动态 disabling/omitting Apache 配置指令(DRY)

Dynamically disabling/omitting Apache configuration directives (DRY)

我正在开发一个运行 Apache 的产品,我正在尝试使配置更干 — 现在有许多不同的 vhost 配置在不同的情况下加载,但 90% 是相同的,这是当需要进行更改时,处理起来非常繁琐。我不认为 Apache 是真正为这种动态环境设计的,但是 w/e,无论如何我都在这里。

所以我首先转向了环境变量——我有一个小的引导脚本,它确定必要的配置并将变量转储到 /etc/apache2/envvars(由 apache2ctl 加载,类似Ubuntu)。这让我可以做这样的事情:

envvars:

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

虚拟主机配置:

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

这工作正常,但只要 MYKEY, &al., 是引用非空文件的非空变量。例如,在某些配置中,不需要 CA 捆绑包,因此我尝试将 MYBUNDLE 指向 /dev/null。 Apache 认为这是一个 'syntax error' 因为 /dev/null 是一个空文件,并且拒绝启动。

我的问题:有什么方法可以在 Apache 配置中动态 disable/omit 配置指令(基于环境变量或类似机制),而不必为每种可能的情况维护单独的文件?

替代问题:有什么方法可以让我以 Apache 不会认为无效的方式为这个特定指令 (SSLCACertificateFile) 提供一个空的 value/certificate?

Ubuntu 12.04.5
阿帕奇 2.2.22

看来您想要的是一个配置管理工具。

现在我不确定您部署的频率如何,但您可能可以制作一个脚本来为您生成模板?

如果您有更大的需求,也许可以考虑使用自动化软件并使用某种模板?我在想像 chef (https://www.chef.io/) or puppet (http://puppetlabs.com/) 或...它们都支持模板,您可以根据环境/服务器/情绪为不同的值提供值。