Comment déboguer une configuration d'hôte virtuel Apache?

138

Encore une fois, j'ai un problème avec ma configuration d'hôte virtuel apache. (La configuration par défaut est utilisée à la place de ma configuration spécifique).

Le problème n'est pas vraiment la mauvaise configuration mais comment le résoudre.

Quelqu'un a-t-il de bons conseils pour résoudre rapidement ce genre de problème?

Quelques informations supplémentaires.

Le fichier de configuration par défaut est celui-ci:

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>

Et la configuration d'hôte virtuel qui ne s'applique pas est celle-ci:

<VirtualHost *:*>

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

</VirtualHost>
GaetanZ
la source

Réponses:

198

Vérification de la syntaxe

Pour rechercher des erreurs de syntaxe dans les fichiers de configuration:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Lister les hôtes virtuels

Pour répertorier tous les hôtes virtuels et leurs emplacements:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
la source
5
-Sest un synonyme de -t -D DUMP_VHOSTSdonc ces deux sont les mêmes
aron.duby
2
Pour Windows, (si vous utilisez xampp), vous avez ces mêmes commandes à: \ xampp \ apache \ bin
Jahmic
Pour Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
C'est très utile, merci mais ce n'est pas suffisant, j'ai eu des problèmes avec un hôte virtuel qu'il devrait être utilisé et ne l'est pas, je ne sais pas pourquoi, je souhaite obtenir des journaux sur la façon dont Apache choisit le serveur virtuel.
Loenix
1
Existe-t-il un moyen pour qu'Apache ajoute un message au fichier d'erreur ou ailleurs lorsqu'un accès réel entre pour un hôte virtuel ou principal donnant des informations dynamiques sur l'hôte choisi? J'ai essayé LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector
28

Voici une commande qui, je pense, pourrait être utile:

apachectl -t -D DUMP_VHOSTS

Vous obtiendrez une liste de tous les vhosts, vous saurez lequel est celui par défaut et vous vous assurerez que votre syntaxe est correcte (identique à apachectl configtest suggéré par yojimbo87).

Vous saurez également où chaque hôte virtuel est déclaré. Cela peut être pratique si vos fichiers de configuration sont en désordre. ;)

Arnaud Massé
la source
24

Si vous essayez de déboguer la configuration de votre hôte virtuel, vous pouvez trouver le commutateur de ligne de commande Apache -S utile. Autrement dit, tapez la commande suivante:

httpd -S

Cette commande affichera une description de la façon dont Apache a analysé le fichier de configuration. Un examen attentif des adresses IP et des noms de serveurs peut aider à découvrir des erreurs de configuration. (Voir la documentation du programme httpd pour d'autres options de ligne de commande).

Michael Spector
la source
9
Dans Apache2 c'estapache2ctl -S
artfulrobot
1
ou alternativementAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir
12

Vérifiez d'abord les fichiers de configuration pour les erreurs de syntaxe avec apachectl configtest, puis examinez les journaux d' erreurs Apache .

yojimbo87
la source
Je n'ai aucune erreur de syntaxe car mon serveur redémarre et recharge la configuration sans aucun problème. Je ne sais pas dans quel journal je pourrais trouver des détails sur ma configuration.
GaetanZ
Les journaux d'erreurs se trouvent généralement dans le fichier '/var/log/apache2/error.log'.
yojimbo87
Vous pouvez également utiliser "apache2ctl -t".
Larry Silverman
11

J'avais un nouveau fichier de configuration VirtualHost qui ne s'affichait pas lors de l'utilisation de la apachectl -Scommande. Après avoir beaucoup gratté la tête, j'ai réalisé que mon fichier n'avait pas le suffixe ".conf". Une fois que j'ai renommé le fichier avec ce suffixe, mon Vhost a commencé à s'afficher et à fonctionner!

GreensterRox
la source
8

J'ai récemment eu des problèmes avec un VirtualHost. J'avais l'habitude a2ensited'activer un hôte mais avant d'exécuter un redémarrage (qui tuerait le serveur en cas d'échec), j'ai couru

apache2ctl -S

Ce qui vous donne des informations sur ce qui se passe avec vos hôtes virtuels. Ce n'est pas parfait, mais ça aide.

Jacksonkr
la source
3

J'ai trouvé ma propre erreur, je n'ai pas ajouté le nom du fichier journal: ErrorLog / var / log / apache2
Et ce chemin: Répertoire "/ usr / share / doc /" ne contenait pas les sources du site Web.

Après avoir changé ces deux, tout a fonctionné. Fait intéressant, apache n'a émis aucune erreur, mais n'a tout simplement pas ouvert mon site Web en silence sur mon Mac OS Sierra.

Konstantin Vahrushev
la source
Bonne réponse, aidez-moi à trouver un problème similaire. Toute la syntaxe et -S vhosts sont corrects, site toujours incorrect. S'est avéré être: 80 et: 443 a le même fichier journal d'accès, ce qui semblait confondre les choses. Fichier séparé pour chaque port et les sites ont commencé à fonctionner.
David McNeill