Apache - Incluir arquivos conf Relativos ao ServerConfigFile (-f arg)

2

Eu quero usar a opção de linha de comando -f para o servidor Apache para que eu possa armazenar os arquivos conf em um local separado (um data diectory) dos binários do servidor.

O problema é que eu uso a diretiva Include para separar e organizar as configurações, mas quando eu uso um comando como Include "addons/SVN.conf" , ele falha porque o Apache procura por addons / SVN.conf em relação ao diretório ServerRoot em vez do Diretório ServerConfigFile.

Eu posso contornar isso usando caminhos absolutos (por exemplo, Include "e:\foo\bar\baz\Apache\conf\addons\svn.conf" , mas eu não gosto disso, pois isso significa que eu teria que alterar cada diretiva Include se eu mover a pasta conf em vez de simplesmente alterar a opção -f.

Alguém sabe de uma maneira de obter a diretiva Include para trabalhar em relação ao arquivo conf que o Apache é passado. Eu tentei Include "./addons/SVN.conf" , mas isso também foi relativo ao ServerRoot. Esse tipo de comportamento forçado Incluir relativo a ServerRoot inclui todo o propósito de especificar um arquivo de configuração alternativo para o arquivo ServerRoot / conf.

Obrigado.

    
por Synetech 08.05.2010 / 03:34

2 respostas

1

Ok, eu percebi (obrigado joschi por sugerir a alteração ServerRoot , que fazia parte da solução).


O que eu tenho são dois locais relacionados ao Apache, por exemplo:

  Y:\Servers\HTTP\Apache    - binários e   X:\Docs\Settings\Apache   - arquivos de configuração

Então o que eu fiz foi:

  1. Eu movi os diretórios conf e logs do diretório binaries para o diretório docs. Em …Settings\Apache\conf está o link , que é quase idêntico ao link . Tem a seguinte entrada:

      ServerRoot "Y:\Servers\HTTP\Apache"   # como normal

  2. Então, na parte inferior do arquivo, adicionei

      ServerRoot "X:\Docs\Settings\Apache"   - altere o ServerRoot para   Include "conf/Includes.conf"           - inclua personalizações

  3. O próximo passo foi simplesmente editar alguns dos meus arquivos Includ -ed .conf que usam LoadModule e passar o caminho completo para o arquivo .so

    Se eu tivesse muitas chamadas LoadModule em meus arquivos .conf personalizados, em vez de usar caminhos absolutos, o que eu faria seria criar dois novos arquivos .conf (por exemplo, BinLoc.conf e < strong> ConfLoc.conf ) contendo cada uma diretiva ServerRoot para configurá-lo para os diretórios binário / docs. Então eu poderia envolver as chamadas do LoadModule como:

      Include "conf/BinLoc.conf"                  
        LoadModule ssl_module modules/mod_ssl.so  
      Include "conf/ConfLoc.conf"                 

    (Infelizmente, o segundo Include teria que usar um caminho absoluto para o diretório de configurações, então seria uma espécie de derrotar o propósito.)

  4. Finalmente, eu configuro o Apache para carregar o arquivo link do meu diretório docs (isto é, load X:\Docs\Settings\Apache\httpd.conf ). Havia várias maneiras de fazer isso. O instalador usa a entrada de registro ConfigArgs para o serviço Apache, mas eu decidi não usá-lo e esvaziá-lo. Eu tentei definir HKLM \ SOFTWARE \ Apache \ Foundation \ Apache \ 2.2.15 \ ServerRoot para X:\Docs\Settings\Apache , mas o Apache não parece entender isso. Eu decidi ir com a linha de comando. Eu modifiquei meu Install.bat para que quando cria o serviço Apache, ele passe o arquivo link usando o argumento -f (editar um arquivo em lote é muito mais fácil / rápido do que modificar uma cadeia múltipla no registro).

Na verdade, eu já estava passando o arquivo .conf usando -f , então as únicas mudanças necessárias (além de mover as pastas para o diretório docs) foram adicionar um / em> diretiva para ligar para redefinir o diretório de configuração e alterar as poucas diretivas LoadModule nos meus arquivos .conf não-padrão (isto é, personalizados) para usar caminhos absolutos (embora, se houvesse muitos deles, Eu poderia configurá-lo de volta para o binário.

O Apache agora roda muito bem, e os binários (substituíveis) e os arquivos de configuração (insubstituíveis) são bons e separados. %código%


(Ah, e os logs estão em outro lugar, por exemplo, :) . As entradas relacionadas ao log no link usam um caminho absoluto para isso, mas eu deveria alterar o diretório de log, é um simples questão de procurar-e-substituir-em-arquivos para atualizar, assim como seria com os caminhos absolutos para as diretivas LoadModule em meus arquivos .conf personalizados se eu mudei a localização dos binários.)

    
por 09.05.2010 / 20:16
1

Basta definir ServerRoot para o diretório que você precisa ou usar o comando -d parâmetro de linha. A diretiva ServerRoot não precisa apontar para o diretório que contém os binários e bibliotecas para o Apache httpd.

    
por 08.05.2010 / 08:04