Estrutura de diretórios e arquivos do Apache: onde ficam configs, sites e módulos

Capítulo 2

Tempo estimado de leitura: 9 minutos

+ Exercício

Visão geral: por que a estrutura de arquivos importa

No Apache, a configuração final em execução raramente está em um único arquivo. Em geral existe um arquivo “principal” que inclui outros arquivos (por diretivas como Include e IncludeOptional), além de diretórios padronizados para sites (Virtual Hosts), módulos, logs e conteúdo publicado (DocumentRoot). Entender essa organização ajuda a: localizar rapidamente onde alterar um Virtual Host, descobrir de onde vem uma diretiva ativa, e mapear o caminho do conteúdo que o navegador está recebendo.

Distribuições Debian/Ubuntu: apache2.conf, sites-* e mods-*

Arquivos e diretórios mais comuns

  • Arquivo principal: /etc/apache2/apache2.conf
  • Portas/escuta: /etc/apache2/ports.conf
  • Sites (Virtual Hosts): /etc/apache2/sites-available/ e /etc/apache2/sites-enabled/
  • Módulos: /etc/apache2/mods-available/ e /etc/apache2/mods-enabled/
  • Configurações adicionais: /etc/apache2/conf-available/ e /etc/apache2/conf-enabled/
  • Logs: tipicamente em /var/log/apache2/
  • DocumentRoot padrão: frequentemente /var/www/html (mas pode variar por site)

Como funciona o “available” vs “enabled”

Nos sistemas Debian/Ubuntu, o padrão é manter arquivos “disponíveis” em *-available e ativar/desativar criando/removendo links em *-enabled. O Apache lê o que está em *-enabled (normalmente via Include no arquivo principal).

Na prática, isso significa: você edita o arquivo em sites-available (ou mods-available) e o que determina se ele entra na configuração efetiva é a presença do link correspondente em sites-enabled (ou mods-enabled).

Includes típicos no apache2.conf

É comum encontrar no /etc/apache2/apache2.conf trechos como:

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

Isso explica por que um Virtual Host criado em sites-available só passa a valer quando está “habilitado” (linkado) em sites-enabled.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

Distribuições RHEL/CentOS/Fedora: httpd.conf e conf.d

Arquivos e diretórios mais comuns

  • Arquivo principal: /etc/httpd/conf/httpd.conf
  • Configurações adicionais: /etc/httpd/conf.d/ (arquivos .conf carregados por include)
  • Módulos (config): frequentemente em /etc/httpd/conf.modules.d/
  • Módulos (binários): tipicamente em /usr/lib64/httpd/modules/ (ou /usr/lib/httpd/modules/, dependendo da arquitetura)
  • Logs: tipicamente em /var/log/httpd/
  • DocumentRoot padrão: frequentemente /var/www/html

Includes típicos no httpd.conf

É comum o /etc/httpd/conf/httpd.conf incluir diretórios inteiros:

IncludeOptional conf.d/*.conf
IncludeOptional conf.modules.d/*.conf

Nesse modelo, Virtual Hosts e ajustes adicionais costumam ficar em arquivos separados dentro de /etc/httpd/conf.d/ (por exemplo, vhost-exemplo.conf).

Como localizar a configuração efetiva (o que o Apache realmente está usando)

1) Descobrir qual arquivo é o “principal”

Dependendo da distribuição, o arquivo principal costuma ser:

  • Debian/Ubuntu: /etc/apache2/apache2.conf
  • RHEL/CentOS/Fedora: /etc/httpd/conf/httpd.conf

Mas a forma mais confiável é perguntar ao próprio binário do Apache. Use um dos comandos abaixo (o nome do executável pode variar):

apache2 -V
httpd -V

Procure no output as linhas:

  • SERVER_CONFIG_FILE (arquivo principal)
  • HTTPD_ROOT (raiz de configuração)

Exemplo de leitura do resultado (o texto exato varia):

SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
HTTPD_ROOT="/etc/apache2"

2) Ver a configuração “expandida” (com includes resolvidos)

Para enxergar a configuração final após processar Include/IncludeOptional, use:

apache2ctl -S
httpd -S

Esse comando é excelente para mapear Virtual Hosts e descobrir em qual arquivo cada host está definido. Ele costuma listar algo como “port 80 namevhost ... (arquivo:linha)”.

3) Encontrar de onde vem uma diretiva específica

Quando você suspeita que uma diretiva está sendo definida em algum include, combine busca recursiva com leitura do arquivo principal:

grep -R "^\s*DocumentRoot" /etc/apache2/
grep -R "^\s*DocumentRoot" /etc/httpd/

Repita a ideia para outras diretivas comuns: ServerName, ServerAlias, ErrorLog, CustomLog, LoadModule, Include, Directory.

DocumentRoot: como mapear o caminho do conteúdo publicado

1) Descobrir o DocumentRoot do site ativo

O DocumentRoot pode estar no Virtual Host específico, ou herdado de uma configuração global. Para descobrir o que vale para um host, siga este fluxo:

  • Liste os Virtual Hosts e o arquivo/linha: apache2ctl -S ou httpd -S.
  • Abra o arquivo indicado e procure o bloco <VirtualHost ...> correspondente.
  • Dentro dele, localize DocumentRoot. Se não existir, procure por um DocumentRoot global no arquivo principal ou em includes.

Exemplo de Virtual Host típico:

<VirtualHost *:80>
    ServerName exemplo.local
    DocumentRoot /var/www/exemplo/public
</VirtualHost>

2) Confirmar o caminho do conteúdo na prática

Depois de identificar o DocumentRoot, mapeie o arquivo servido para uma URL. Se a URL for http://exemplo.local/, normalmente o Apache tentará servir um arquivo de índice dentro do DocumentRoot (por exemplo, index.html ou index.php, dependendo de DirectoryIndex).

Procure a diretiva DirectoryIndex para saber a ordem de preferência:

grep -R "^\s*DirectoryIndex" /etc/apache2/
grep -R "^\s*DirectoryIndex" /etc/httpd/

Se DirectoryIndex incluir index.html, então o caminho típico será:

<DocumentRoot>/index.html

Logs: onde ficam e como identificar o arquivo certo por site

Diretórios padrão de logs

  • Debian/Ubuntu: /var/log/apache2/
  • RHEL/CentOS/Fedora: /var/log/httpd/

Logs globais vs por Virtual Host

Um Virtual Host pode definir seus próprios logs:

ErrorLog /var/log/apache2/exemplo_error.log
CustomLog /var/log/apache2/exemplo_access.log combined

Se essas diretivas não estiverem no Virtual Host, o Apache pode usar logs globais definidos em outro arquivo incluído. Para descobrir o que está valendo, busque por ErrorLog e CustomLog nos diretórios de configuração e verifique em qual contexto aparecem (global ou dentro de <VirtualHost>).

Módulos: onde são declarados e onde ficam os arquivos .so

Debian/Ubuntu: mods-available e mods-enabled

Em Debian/Ubuntu, cada módulo costuma ter:

  • Um arquivo .load (com LoadModule)
  • Opcionalmente um arquivo .conf (configuração do módulo)

Exemplo do que você pode encontrar em /etc/apache2/mods-available/:

# arquivo: rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

O módulo passa a ser carregado quando o link correspondente existir em /etc/apache2/mods-enabled/.

RHEL/CentOS/Fedora: conf.modules.d e diretório de módulos

Nessas distribuições, os LoadModule geralmente ficam em arquivos dentro de /etc/httpd/conf.modules.d/, apontando para um diretório como /usr/lib64/httpd/modules/.

Para localizar rapidamente declarações de módulos:

grep -R "^\s*LoadModule" /etc/apache2/
grep -R "^\s*LoadModule" /etc/httpd/

Includes e herança de diretivas: como entender “de onde veio” uma configuração

O que significa herança no Apache

Diretivas podem ser definidas em diferentes níveis (global, dentro de <VirtualHost>, dentro de <Directory>). Além disso, um arquivo pode incluir outro. O resultado é que uma diretiva pode estar “valendo” para um site mesmo que você não a veja no arquivo do Virtual Host, porque ela foi definida em um include global.

Passo a passo para identificar diretivas herdadas por include

  • 1) Identifique o arquivo do Virtual Host com apache2ctl -S ou httpd -S.
  • 2) Abra o arquivo e veja o que está explicitamente definido no bloco <VirtualHost>.
  • 3) Se a diretiva não estiver ali, procure no arquivo principal por Include/IncludeOptional e liste os caminhos incluídos.
  • 4) Faça uma busca recursiva pela diretiva nos diretórios incluídos (ex.: conf-enabled, conf.d).
  • 5) Verifique o contexto: global, <VirtualHost>, <Directory>. Isso muda o escopo do efeito.

Exemplo prático: se você quer descobrir por que um diretório está com listagem habilitada/desabilitada, procure por diretivas como Options e blocos <Directory>:

grep -R "<Directory" -n /etc/apache2/
grep -R "^\s*Options" -n /etc/apache2/

Exercícios de navegação (mão na massa)

Exercício 1: encontrar o arquivo efetivo de configuração

Objetivo: descobrir qual é o arquivo principal e quais includes ele carrega.

  • 1) Rode: apache2 -V ou httpd -V.
  • 2) Anote SERVER_CONFIG_FILE e HTTPD_ROOT.
  • 3) Abra o arquivo principal e localize todas as linhas Include/IncludeOptional.
  • 4) Liste os arquivos realmente incluídos (expanda mentalmente curingas como *.conf e confira quais existem no disco).

Exercício 2: identificar uma diretiva herdada por include

Objetivo: escolher uma diretiva e rastrear onde ela é definida.

  • 1) Escolha uma diretiva: DirectoryIndex (boa para começar).
  • 2) Busque recursivamente: grep -R "^\s*DirectoryIndex" /etc/apache2/ (ou /etc/httpd/).
  • 3) Para cada ocorrência, anote: arquivo, linha e contexto (global, VirtualHost, Directory).
  • 4) Compare com o Virtual Host ativo (via apache2ctl -S/httpd -S) e determine qual definição está afetando o seu site.

Exercício 3: mapear o caminho do conteúdo publicado

Objetivo: partir de um host/URL e chegar ao arquivo no disco.

  • 1) Liste os Virtual Hosts e identifique o arquivo do host desejado: apache2ctl -S ou httpd -S.
  • 2) No arquivo do Virtual Host, encontre DocumentRoot. Se não existir, procure o DocumentRoot global nos includes.
  • 3) Descubra o DirectoryIndex efetivo (busca recursiva) para saber qual arquivo é servido em /.
  • 4) Construa o caminho final: <DocumentRoot>/<arquivo_de_index>.
  • 5) Verifique se o arquivo existe e se o usuário do Apache teria permissão de leitura (sem alterar permissões aqui; apenas verifique).

Exercício 4: localizar logs do site e relacionar com o Virtual Host

Objetivo: identificar quais arquivos de log um site está usando.

  • 1) No arquivo do Virtual Host, procure ErrorLog e CustomLog.
  • 2) Se não houver, busque essas diretivas globalmente: grep -R "^\s*ErrorLog" e grep -R "^\s*CustomLog".
  • 3) Anote os caminhos e confirme em qual diretório padrão eles ficam (/var/log/apache2 ou /var/log/httpd).

Exercício 5: mapear módulos carregados e onde são declarados

Objetivo: descobrir quais módulos estão habilitados e em quais arquivos.

  • 1) Busque por LoadModule: grep -R "^\s*LoadModule" /etc/apache2/ ou /etc/httpd/.
  • 2) Em Debian/Ubuntu, compare mods-available vs mods-enabled e identifique quais estão efetivamente habilitados (presentes em mods-enabled).
  • 3) Em RHEL/CentOS/Fedora, verifique quais arquivos em /etc/httpd/conf.modules.d/ contêm os LoadModule e para quais caminhos .so apontam.

Agora responda o exercício sobre o conteúdo:

Em um sistema Debian/Ubuntu, por que um Virtual Host criado em sites-available pode não estar ativo no Apache?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Em Debian/Ubuntu, os arquivos ficam em sites-available, mas só passam a valer quando há o link correspondente em sites-enabled, que é o diretório incluído pelo arquivo principal via IncludeOptional.

Próximo capitúlo

Modelo de configuração do Apache: ServerConfig, VirtualHost e contexto de diretivas

Arrow Right Icon
Capa do Ebook gratuito Apache para Iniciantes: Configuração Essencial, Virtual Hosts e Segurança Básica
13%

Apache para Iniciantes: Configuração Essencial, Virtual Hosts e Segurança Básica

Novo curso

16 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.