¿Cómo depurar una configuración de host virtual apache?

138

Una vez más, tengo un problema con mi configuración de host virtual apache. (Se utiliza la configuración predeterminada en lugar de la específica).

El problema no es realmente la configuración incorrecta, sino cómo resolverlo.

¿Alguien tiene buenos consejos para resolver este tipo de problema rápidamente?

Algunas informaciones más.

El archivo conf predeterminado es 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>

Y la configuración de host virtual que no se aplica es esta:

<VirtualHost *:*>

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

</VirtualHost>
GaetanZ
fuente

Respuestas:

198

Verificación de sintaxis

Para verificar los archivos de configuración en busca de errores de sintaxis:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Lista de hosts virtuales

Para enumerar todos los hosts virtuales y sus ubicaciones:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
fuente
55
-Ses sinónimo de -t -D DUMP_VHOSTSlo que los dos son la misma
aron.duby
2
Para Windows, (si está usando xampp), tiene estos mismos comandos en: \ xampp \ apache \ bin
Jahmic
Para Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
Eso es muy útil, gracias pero no es suficiente, tuve algunos problemas con un vhost que debería usarse y no es, no sé por qué, deseo obtener registros sobre cómo apache elige el vhost.
Loenix
1
¿Hay alguna forma de hacer que Apache agregue un mensaje al archivo de error o en otro lugar cuando entra un acceso real para un host virtual o principal que proporciona información dinámica sobre qué host se eligió? He intentado LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector
28

Aquí hay un comando que creo que podría ser de ayuda:

apachectl -t -D DUMP_VHOSTS

Obtendrá una lista de todos los vhosts, sabrá cuál es el predeterminado y se asegurará de que su sintaxis sea correcta (igual que apachectl configtest sugerido por yojimbo87).

También sabrá dónde se declara cada vhost. Puede ser útil si sus archivos de configuración son un desastre. ;)

Arnaud Massé
fuente
24

Si está tratando de depurar la configuración de su host virtual, puede encontrar útil el interruptor de línea de comandos Apache -S. Es decir, escriba el siguiente comando:

httpd -S

Este comando desplegará una descripción de cómo Apache analizó el archivo de configuración. Un examen cuidadoso de las direcciones IP y los nombres de los servidores puede ayudar a descubrir errores de configuración. (Consulte los documentos del programa httpd para ver otras opciones de línea de comandos).

Michael Spector
fuente
9
En Apache2 esto esapache2ctl -S
artfulrobot
1
o alternativamenteAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir
12

Primero revise los archivos de configuración para errores de sintaxis con apachectl configtesty luego busque en los registros de errores de apache .

yojimbo87
fuente
No tengo ningún error de sintaxis porque mi servidor se reinicia y vuelve a cargar la configuración sin ningún problema. No sé en qué registro podría encontrar detalles sobre mi configuración.
GaetanZ
Los registros de errores generalmente se encuentran en el archivo '/var/log/apache2/error.log'.
yojimbo87
También puede usar "apache2ctl -t".
Larry Silverman
11

Tenía un nuevo archivo de configuración de VirtualHost que no se mostraba al usar el apachectl -Scomando. Después de mucho rascarme la cabeza, me di cuenta de que mi archivo no tenía el sufijo ".conf". Una vez que cambié el nombre del archivo con ese sufijo, ¡mi Vhost comenzó a mostrarse y funcionar!

GreensterRox
fuente
8

Recientemente tuve algunos problemas con un VirtualHost. Solía a2ensitehabilitar un host, pero antes de ejecutar un reinicio (que mataría al servidor en caso de error) ejecuté

apache2ctl -S

Lo que le brinda información sobre lo que sucede con sus hosts virtuales. No es perfecto, pero ayuda.

Jacksonkr
fuente
3

Encontré mi propio error, no agregué el nombre del archivo de registro: ErrorLog / var / log / apache2
Y esta ruta: Directorio "/ usr / share / doc /" No contenía fuentes del sitio web.

Después de cambiar estos dos, todo funcionó. Curiosamente, apache no emitió ningún error, simplemente no abrió mi sitio web en silencio en mi Mac OS Sierra.

Konstantin Vahrushev
fuente
Buena respuesta, ayúdame a encontrar un problema similar. Todas las sintaxis y -S vhosts son correctos, el sitio sigue siendo incorrecto. Resultó ser: 80 y: 443 tiene el mismo archivo de registro de acceso, lo que pareció confundir las cosas. Archivo separado para cada puerto, y los sitios comenzaron a funcionar.
David McNeill