动态 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/) 或...它们都支持模板,您可以根据环境/服务器/情绪为不同的值提供值。
我正在开发一个运行 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/) 或...它们都支持模板,您可以根据环境/服务器/情绪为不同的值提供值。