Apache - включает файлы conf, относящиеся к ServerConfigFile (-f arg)
Я хочу использовать -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 Включить исключает всю цель указания альтернативного файла конфигурации для файла в ServerRoot / conf.
Благодарю.
2 ответа
Хорошо, я понял это (спасибо 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"
- изменить ServerRootInclude "conf/Includes.conf"
- включить настройкиСледующим шагом было просто отредактировать пару из моих Includ -ed.conf файлов, которые используют LoadModule, и передать полный путь к.so файлу.
Если бы в моих настроенных файлах.conf было много вызовов LoadModule, вместо использования абсолютных путей, я бы создал два новых файла.conf (например, BinLoc.conf и ConfLoc.conf), каждый из которых содержал бы одну директиву ServerRoot для установите его в каталоги bin / docs. Тогда я мог бы обернуть вызовы LoadModule так:
Include "conf/BinLoc.conf"
LoadModule ssl_module modules/mod_ssl.so
Include "conf/ConfLoc.conf"
(К сожалению, второе "Включить" должно было бы использовать абсолютный путь к каталогу настроек, так что это как бы не соответствовало цели.)
Наконец, я установил Apache для загрузки файла httpd.conf из моей директории docs (т.е.
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.