2015-02-24 55 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