Назад | Перейти на главную страницу

Apache - включить файлы конфигурации относительно 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 Include сводит на нет всю цель указания файла конфигурации, альтернативного тому, который находится в ServerRoot / conf.

Спасибо.

Ладно разобрался (спасибо Joschi за предложение изменить ServerRoot, это было частью решения).


У меня есть два места, связанных с Apache, например:

  Y:\Servers\HTTP\Apache    - двоичные файлы
  X:\Docs\Settings\Apache   - файлы конфигурации

Итак, я сделал следующее:

  1. Я переместил conf и logs каталоги из каталога двоичных файлов в каталог документов. В …Settings\Apache\conf является httpd.conf что почти идентично httpd.conf.default. В нем есть следующая запись:

      ServerRoot "Y:\Servers\HTTP\Apache"   #как обычно

  2. Затем в конце файла я добавил

      ServerRoot "X:\Docs\Settings\Apache"   - изменить ServerRoot
      Include "conf/Includes.conf"           - включить настройки

  3. Следующим шагом было просто отредактировать пару моих Включено-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 должно было бы использовать абсолютный путь к каталогу настроек, поэтому это как бы нарушит цель.)

  4. Наконец, я установил 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.