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.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
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.confcarregados 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 -Souhttpd -S. - Abra o arquivo indicado e procure o bloco
<VirtualHost ...>correspondente. - Dentro dele, localize
DocumentRoot. Se não existir, procure por umDocumentRootglobal 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(comLoadModule) - 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 -Souhttpd -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/IncludeOptionale 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 -Vouhttpd -V. - 2) Anote
SERVER_CONFIG_FILEeHTTPD_ROOT. - 3) Abra o arquivo principal e localize todas as linhas
Include/IncludeOptional. - 4) Liste os arquivos realmente incluídos (expanda mentalmente curingas como
*.confe 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 -Souhttpd -S. - 2) No arquivo do Virtual Host, encontre
DocumentRoot. Se não existir, procure oDocumentRootglobal nos includes. - 3) Descubra o
DirectoryIndexefetivo (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
ErrorLogeCustomLog. - 2) Se não houver, busque essas diretivas globalmente:
grep -R "^\s*ErrorLog"egrep -R "^\s*CustomLog". - 3) Anote os caminhos e confirme em qual diretório padrão eles ficam (
/var/log/apache2ou/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-availablevsmods-enablede identifique quais estão efetivamente habilitados (presentes emmods-enabled). - 3) Em RHEL/CentOS/Fedora, verifique quais arquivos em
/etc/httpd/conf.modules.d/contêm osLoadModulee para quais caminhos.soapontam.