Em que ordem o Apache carrega arquivos conf e quais?


10

Estou olhando para um servidor CentOS 6.5 com uma estrutura da web instalada que foi adicionada ao longo dos anos por muitos. Existem 5 arquivos .conf ativos em / conf, incluindo httpd.conf.

No httpd.conf, o include lê

Include conf.d/*.conf

e que agarra todos os arquivos desse diretório, mas sem nenhuma ordem específica aplicada que eu saiba, e o que dizer do diretório / conf (no .d)?

Existe uma configuração que declara a ordem de carregamento ou eles são apenas retirados de az?

Não sou o administrador do servidor, sou desenvolvedor e o problema está nos caminhos para o upload de arquivos para um diretório / Temp, onde verifiquei se o caminho especificado está correto para os arquivos que me preocupam.

Então, a 1ª pergunta é:

O Apache carrega tudo de / conf ou há uma lista especificada em algum lugar?

A segunda pergunta seria:

Em que ordem o Apache carrega os arquivos em ordem alfabética?

Por último:

Um arquivo que não termina em .conf é incluído? Por exemplo, se eu nomear algo como myconfig.conf.old, o Apache ignorará?

Respostas:


14

A ordem é alfabética. Ele carrega apenas o que o caminho Incluir especifica. No caso do Include conf.d/*.confapache, todos os arquivos com nomes terminados em .conf.

Este é um extrato da documentação do Apache :

Os caracteres curinga do estilo shell (fnmatch ()) podem ser usados ​​para incluir vários arquivos de uma só vez, em ordem alfabética . Além disso, se Incluir aponta para um diretório, em vez de um arquivo, o Apache lerá todos os arquivos desse diretório e qualquer subdiretório. Mas a inclusão de diretórios inteiros não é recomendada, pois é fácil deixar acidentalmente arquivos temporários em um diretório que pode causar a falha do httpd.


Obrigado, que responde às perguntas 1 e 2 certamente. Procurei nos documentos do Apache, mas não consegui encontrar a resposta.
chrtp

Em termos gerais (a ordem dos itens de configuração substitui os itens anteriores) está correta. Certamente se os comandos estão na mesma seção de configuração. Mas, por exemplo, é possível (usando AllowOverride) substituir itens de configuração por config em um .htaccessarquivo.
precisa saber é

Desculpe, editei meu comentário antes de ver o seu. Não há .htaccess nesse caso, mas há um arquivo começando com 't' que está substituindo todo o resto. Vou mudar o nome ou mover o arquivo.
Chrtp

1
@chrtp, e por que um arquivo começando com tsubstituiria todo o resto?
Andrew Savinykh

1

O Apache carrega uma configuração extra com base na diretiva "Incluir". Provavelmente é assim:

Include conf.d/*.conf

Portanto, obviamente, inclui tudo em "conf.d" que se parece com "* .conf".

Para torná-lo ainda mais insano, você pode adicionar um número arbitrário de diretórios com "include", todos os quais podem conter aproximadamente os mesmos arquivos de configuração, que todos se substituiriam alegremente na inicialização ... E então eles mesmos serão substituídos pelo arquivo .htaccess em vários diretórios hospedados.

Até onde eu sei, o httpd.conf é o primeiro, seguido pelos diretórios na ordem em que estão incluídos e depois alfabeticamente a partir daí.

Bons tempos. Você pode usar o apachectl -t ou o apachectl configtest para ter uma idéia de se sua configuração causará ou não problemas.


1
Obrigado, parece que alguém deixou um arquivo chamado template.conf que, obviamente, é carregado por último e substitui outros arquivos que especificam o caminho para / Temp. Só posso adivinhar o que mais está sendo quebrado com isso lá!
Chrtp

1
@chrtp Para aumentar a hilaridade, as diretivas podem ser especificadas em tempo de execução usando -C (para adicioná-las antes de ler os arquivos de configuração) e -c (para lê-las após os arquivos de configuração), para que você possa obter uma configuração totalmente diferente na linha de comando no arranque.
precisa saber é o seguinte

1

Se você deseja alterar a ordem, basta abrir o primeiro arquivo conf nos sites de diretório disponíveis e, antes do primeiro VirtualHost *: 80, adicionar seu código de host virtual.

No meu caso, quero que o hub.xxx.com.conf esteja antes do bayxxx.com.conf. Então eu abro o hub.xxx.com.conf e coloco o host virtual no início de um arquivo

Por exemplo:

<VirtualHost *:80>
    DocumentRoot /www/hub.xxx.com/www/root
    ServerName hub.xxx.com
    ServerAlias *.hub.xxx.com
    <Directory "/www/hub.xxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /www/bayxxx.com/www/root
    ServerName bayxxx.com
    ServerAlias www.bayxxx.com
    <Directory "/www/bayxxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.