2015-02-24 3 views
0

Я работаю над продуктом, который запускает Apache, и я пытаюсь сделать конфигурацию более СУХОЙ - сейчас существует множество различных конфигураций vhost, которые загружаются в разных ситуациях, но идентичны на 90%, и это очень утомительно, когда нужно делать изменения. Я не думаю, что Apache действительно спроектирован с учетом такой динамической среды, но w/e, здесь я все равно.Динамическое отключение/отсутствие директив конфигурации Apache (DRY)

Итак, я сначала обратился к переменным окружения - у меня есть небольшой скрипт для загрузки, который определяет необходимые параметры конфигурации и дампов в /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, & аль, являются не-. пустые переменные, ссылающиеся на непустые файлы. В некоторых конфигурациях, например, не требуется пакет CA, поэтому я попытался просто указать MYBUNDLE на /dev/null. Apache считает это «синтаксической ошибкой», потому что /dev/null является пустым файлом и отказывается запускаться.

Мой вопрос: есть ли способ динамически отключить/опустить директивы конфигурации в конфигурации Apache (на основе переменных среды или аналогичного механизма) без необходимости поддерживать отдельные файлы для каждого возможного сценария?

Альтернативный вопрос: Есть ли способ предоставить пустое значение/сертификат этой директиве (SSLCACertificateFile) таким образом, чтобы Apache не считал недействительным?

Ubuntu 12.04.5
Apache 2.2.22

ответ

1

Похоже, что вы хотите, это инструмент управления для вашей конфигурации.

Теперь я не уверен, как часто вы развертываете, но вы, вероятно, можете создать сценарий, который генерирует ваши шаблоны для вас?

Если у вас есть большая потребность, возможно, рассмотрите программное обеспечение для автоматизации и используйте какой-то шаблон? Я думаю что-то вроде шеф-повара (https://www.chef.io/) или кукольного (http://puppetlabs.com/) или ... Все они поддерживают шаблон, и вы можете предоставить значение на основе среды/сервера/настроений для разных значений.

+0

Это не серверы, предназначенные для развертывания, а скорее сетевые устройства, находящиеся в распоряжении клиентов, которые перенастраиваются локально и динамически на основе их (ограниченного) ввода. У меня есть некоторый опыт работы с Ansible, я определенно мог бы использовать что-то подобное. Но это большое изменение в работе нашей системы конфигурации, в то время как решение Apache не было бы. Я, вероятно, приму ваш ответ, хотя, я думаю, я не получу идеальный легкий ответ. Cheers – kine

+0

О, возможно, что-то можно сделать ... Разделите каждый раздел в другом файле и повторно используйте его с помощью include. См. Http://httpd.apache.org/docs/current/en/mod/core.html#include – ROunofF