Como depurar uma configuração de host virtual apache?

138

Mais uma vez, tenho um problema com a configuração do meu host virtual apache. (A configuração padrão é usada em vez da minha específica).

O problema não é realmente a configuração incorreta, mas como resolvê-lo.

Alguém tem bons conselhos para resolver esse tipo de problema rapidamente?

Mais algumas informações.

O arquivo conf padrão é este:

NameVirtualHost *
<VirtualHost *>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

E a configuração do host virtual que não se aplica é esta:

<VirtualHost *:*>

ProxyPreserveHost On
ProxyPass / http://ip.ip.ip.ip:8088/
ProxyPassReverse / http://ip.ip.ip.ip:8088/
ServerName wiki.mydomain.com

</VirtualHost>
GaetanZ
fonte

Respostas:

198

Verificação de sintaxe

Para verificar os arquivos de configuração quanto a erros de sintaxe:

# Red Hat-based (Fedora, CentOS) and OSX
httpd -t

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Listar hosts virtuais

Para listar todos os hosts virtuais e seus locais:

# Red Hat-based (Fedora, CentOS) and OSX
httpd -S

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
fonte
5
-Sé um sinônimo para -t -D DUMP_VHOSTSque os dois sejam iguais
aron.duby 20/01
2
Para Windows, (se você estiver usando o xampp), você terá os mesmos comandos em: \ xampp \ apache \ bin
Jahmic
Para Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
Isso é muito útil, obrigado, mas não é suficiente, tive alguns problemas com um vhost que ele deveria ser usado e não é, não sei por que, desejo obter registros sobre como o apache escolhe o vhost.
Loenix12
1
Existe alguma maneira de fazer o Apache adicionar uma mensagem ao arquivo de erro ou a qualquer outro lugar quando um acesso real chega para um host virtual ou principal, fornecendo informações dinâmicas sobre qual host foi escolhido? Eu tentei LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector
28

Aqui está um comando que eu acho que poderia ser de alguma ajuda:

apachectl -t -D DUMP_VHOSTS

Você obterá uma lista de todos os vhosts, saberá qual é o padrão e garantirá que sua sintaxe esteja correta (o mesmo que apachectl configtest sugerido por yojimbo87).

Você também saberá onde cada vhost é declarado. Pode ser útil se seus arquivos de configuração estiverem uma bagunça. ;)

Arnaud Massé
fonte
24

Se você estiver tentando depurar a configuração do host virtual, poderá achar útil a opção de linha de comando do Apache -S. Ou seja, digite o seguinte comando:

httpd -S

Este comando irá despejar uma descrição de como o Apache analisou o arquivo de configuração. Um exame cuidadoso dos endereços IP e nomes de servidores pode ajudar a descobrir erros de configuração. (Consulte a documentação do programa httpd para outras opções de linha de comando).

Michael Spector
fonte
9
Em Apache2 este éapache2ctl -S
artfulrobot
1
ou alternadamenteAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir 19/08/2013
12

Primeiro, verifique os arquivos de configuração quanto a erros de sintaxe apachectl configteste, em seguida, verifique os logs de erros do apache .

yojimbo87
fonte
Não tenho erro de sintaxe porque meu servidor reinicia e recarrega a configuração sem nenhum problema. Não sei em qual log eu poderia encontrar detalhes sobre minha configuração.
GaetanZ
Os logs de erro geralmente estão localizados no arquivo '/var/log/apache2/error.log'.
yojimbo87
Você também pode usar "apache2ctl -t".
Larry Silverman
11

Eu tinha um novo arquivo de configuração do VirtualHost que não estava aparecendo ao usar o apachectl -Scomando. Depois de muito arranhar a cabeça, percebi que meu arquivo não tinha o sufixo ".conf". Depois que renomeei o arquivo com esse sufixo, meu Vhost começou a aparecer e a trabalhar!

GreensterRox
fonte
8

Recentemente, tive alguns problemas com um VirtualHost. Eu costumava a2ensiteativar um host, mas antes de executar uma reinicialização (que mataria o servidor em caso de falha), executei

apache2ctl -S

O que fornece algumas informações sobre o que está acontecendo com seus hosts virtuais. Não é perfeito, mas ajuda.

Jacksonkr
fonte
3

Encontrei meu próprio erro, não adicionei o nome do arquivo de log: ErrorLog / var / log / apache2
E este caminho: Diretório "/ usr / share / doc /" Não contém fontes do site.

Depois que eu mudei esses dois, tudo funcionou. Curiosamente, o apache não emitiu nenhum erro, apenas não abriu meu site silenciosamente no meu Mac OS Sierra.

Konstantin Vahrushev
fonte
Boa resposta, ajude-me a encontrar um problema semelhante. Todas as sintaxes e -S vhosts estão corretas, o site ainda está incorreto. Acabou sendo: 80 e: 443 tem o mesmo arquivo de log de acesso, o que parecia confundir as coisas. Arquivo separado para cada porta e os sites começaram a funcionar.
David McNeill