Я хочу использовать -f
параметр командной строки для сервера Apache, чтобы я мог сохранить conf файлы в отдельном месте (каталог данных) от бинарных файлов сервера.
Проблема в том, что я использую директиву Include для разделения и организации конфигураций, но когда я использую такую команду, как Include "addons/SVN.conf"
, это не удается, потому что Apache ищет addons / SVN.conf относительно каталога ServerRoot, а не каталога ServerConfigFile.
Я могу обойти это, используя абсолютные пути (например, Include "e:\foo\bar\baz\Apache\conf\addons\svn.conf"
, но мне это не нравится, так как это означает, что мне придется изменить каждую директиву Include, если я перемещаю папку conf, а не просто изменяю параметр -f.
Кто-нибудь знает, как заставить работать директиву Include относительно файла conf, который передается Apache. Я попытался Include "./addons/SVN.conf"
, но это тоже относилось к ServerRoot. Это принудительное поведение по отношению к ServerRoot Include сводит на нет всю цель указания файла конфигурации, альтернативного тому, который находится в ServerRoot / conf.
Спасибо.
Ладно разобрался (спасибо Joschi за предложение изменить ServerRoot, это было частью решения).
У меня есть два места, связанных с Apache, например:
Y:\Servers\HTTP\Apache
- двоичные файлы
X:\Docs\Settings\Apache
- файлы конфигурации
Итак, я сделал следующее:
Я переместил conf
и logs
каталоги из каталога двоичных файлов в каталог документов. В …Settings\Apache\conf
является httpd.conf что почти идентично httpd.conf.default. В нем есть следующая запись:
ServerRoot "Y:\Servers\HTTP\Apache"
#как обычно
Затем в конце файла я добавил
ServerRoot "X:\Docs\Settings\Apache"
- изменить ServerRoot
Include "conf/Includes.conf"
- включить настройки
Следующим шагом было просто отредактировать пару моих Включено-ed файлы .conf, которые используют LoadModule, и передача полного пути к файлу .so.
Если бы у меня было много вызовов LoadModule в моих настроенных файлах .conf, вместо использования абсолютных путей, я бы создал два новых файла .conf (например, BinLoc.conf и ConfLoc.conf) каждый из которых содержит один ServerRoot директива, чтобы установить его в каталоги binary / docs. Затем я мог бы обернуть вызовы LoadModule как таковые:
Include "conf/BinLoc.conf"
LoadModule ssl_module modules/mod_ssl.so
Include "conf/ConfLoc.conf"
(К сожалению, второе Include должно было бы использовать абсолютный путь к каталогу настроек, поэтому это как бы нарушит цель.)
Наконец, я установил Apache для загрузки httpd.conf файл из моего каталога документов (т.е. загрузить X:\Docs\Settings\Apache\httpd.conf
). Сделать это можно было несколькими способами. Установщик использует ConfigArgs запись реестра для службы Apache, но я решил не использовать ее и очистил ее. Я пробовал установить HKLM \ SOFTWARE \ Apache Software Foundation \ Apache \ 2.2.15 \ ServerRoot к X:\Docs\Settings\Apache
, но Apache, похоже, этого не понимает. Я решил использовать командную строку. Я изменил свой Install.bat так что когда он создает службу Apache, он передает httpd.conf файл с помощью -f
аргумент (редактирование командного файла намного проще / быстрее, чем изменение многострочного файла в реестре).
Фактически, я уже передавал файл .conf, используя -f
раньше, поэтому в конечном итоге потребовались только изменения (кроме перемещения папок в каталог с моей документацией): добавление дополнительных ServerRoot директива к httpd.conf для сброса каталога конфигурации и изменения нескольких директив LoadModule в моих нестандартных (т.е. настроенных) файлах .conf для использования абсолютных путей (хотя, если их было много, я мог бы вернуть его в двоичный файл.
Apache теперь работает нормально, а (заменяемые) двоичные файлы и (незаменимые) файлы конфигурации хороши и разделены. :)
(О, и журналы находятся в другом месте, например X:\Docs\Logs\Apache
. Записи, относящиеся к журналу httpd.conf используйте абсолютный путь к нему, но если я когда-либо изменю каталог журнала, это простой вопрос поиска и замены в файлах для обновления, как это было бы с абсолютными путями для LoadModule директивы в моих пользовательских файлах .conf, если я изменил расположение двоичных файлов.)
Просто установите ServerRoot в нужный каталог или используйте -d
параметр командной строки. В ServerRoot
Директива не обязательно должна указывать на каталог, содержащий двоичные файлы и библиотеки для Apache httpd.