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   - файлы конфигурации

Итак, что я сделал:

  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. Следующим шагом было просто отредактировать пару из моих 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"                 

    (К сожалению, второе "Включить" должно было бы использовать абсолютный путь к каталогу настроек, так что это как бы не соответствовало цели.)

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

Другие вопросы по тегам