Wie debugge ich eine virtuelle Apache-Host-Konfiguration?

138

Ich habe erneut ein Problem mit meiner Konfiguration des virtuellen Apache-Hosts. (Die Standardkonfiguration wird anstelle meiner spezifischen Konfiguration verwendet.)

Das Problem ist nicht wirklich die Fehlkonfiguration, sondern wie man es löst.

Hat jemand gute Ratschläge, um diese Art von Problem schnell zu lösen?

Noch ein paar Informationen.

Die Standard-Conf-Datei ist folgende:

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>

Die Konfiguration des virtuellen Hosts, die nicht gilt, ist die folgende:

<VirtualHost *:*>

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

</VirtualHost>
GaetanZ
quelle

Antworten:

198

Syntaxprüfung

So überprüfen Sie Konfigurationsdateien auf Syntaxfehler:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Virtuelle Hosts auflisten

So listen Sie alle virtuellen Hosts und ihre Standorte auf:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
quelle
5
-Sist ein Synonym für -t -D DUMP_VHOSTSso sind diese beiden gleich
aron.duby
2
Für Windows (wenn Sie xampp verwenden) haben Sie dieselben Befehle unter: \ xampp \ apache \ bin
Jahmic
Für Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
Das ist sehr nützlich, danke, aber es ist nicht genug. Ich habe einige Probleme mit einem vhost, dass es verwendet werden sollte, und ich weiß nicht warum. Ich möchte Protokolle darüber erhalten, wie Apache den vhost auswählt.
Loenix
1
Gibt es eine Möglichkeit, Apache dazu zu bringen, der Fehlerdatei oder anderswo eine Nachricht hinzuzufügen, wenn ein tatsächlicher Zugriff für einen virtuellen oder Haupthost eingeht, der dynamische Informationen darüber enthält, welcher Host ausgewählt wurde? Ich habe LoadModule log_debug_module modules / mod_log_debug.so ausprobiert ... LogMessage "Debug 1" hook = all
David Spector
28

Hier ist ein Befehl, von dem ich denke, dass er hilfreich sein könnte:

apachectl -t -D DUMP_VHOSTS

Sie erhalten eine Liste aller vhosts, wissen, welche die Standardeinstellung ist, und stellen sicher, dass Ihre Syntax korrekt ist (wie die von yojimbo87 vorgeschlagene apachectl configtest).

Sie wissen auch, wo jeder vhost deklariert ist. Es kann praktisch sein, wenn Ihre Konfigurationsdateien durcheinander sind. ;)

Arnaud Massé
quelle
24

Wenn Sie versuchen, Ihre virtuelle Hostkonfiguration zu debuggen, ist der Befehlszeilenschalter Apache -S möglicherweise hilfreich. Geben Sie den folgenden Befehl ein:

httpd -S

Dieser Befehl gibt eine Beschreibung aus, wie Apache die Konfigurationsdatei analysiert hat. Eine sorgfältige Prüfung der IP-Adressen und Servernamen kann dazu beitragen, Konfigurationsfehler aufzudecken. ( Weitere Befehlszeilenoptionen finden Sie in den Dokumenten zum httpd- Programm.)

Michael Spector
quelle
9
In Apache2 ist diesapache2ctl -S
artfulrobot
1
oder alternativAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir
12

Zuerst überprüfen Konfigurationsdateien auf Syntaxfehler mit apachectl configtestund dann Apache Fehler suchen in Protokollen .

yojimbo87
quelle
Ich habe keinen Syntaxfehler, da mein Server die Konfiguration ohne Probleme neu startet und neu lädt. Ich weiß nicht, in welchem ​​Protokoll ich Details zu meiner Konfiguration finden konnte.
GaetanZ
Fehlerprotokolle befinden sich normalerweise in der Datei '/var/log/apache2/error.log'.
Yojimbo87
Sie können auch "apache2ctl -t" verwenden.
Larry Silverman
11

Ich hatte eine neue VirtualHost-Konfigurationsdatei, die bei Verwendung des apachectl -SBefehls nicht angezeigt wurde . Nach langem Kopfkratzen wurde mir klar, dass meine Datei nicht das Suffix ".conf" hatte. Nachdem ich die Datei mit diesem Suffix umbenannt hatte, begann mein Vhost zu zeigen und zu arbeiten!

GreensterRox
quelle
8

Ich hatte kürzlich einige Probleme mit einem VirtualHost. Früher habe ich a2ensiteeinen Host aktiviert, aber bevor ich einen Neustart ausführte (der den Server bei einem Fehler töten würde), habe ich ausgeführt

apache2ctl -S

Hier erhalten Sie einige Informationen darüber, was mit Ihren virtuellen Hosts los ist. Es ist nicht perfekt, aber es hilft.

Jacksonkr
quelle
3

Ich habe meinen eigenen Fehler gefunden und keinen Protokolldateinamen hinzugefügt: ErrorLog / var / log / apache2
Und dieser Pfad: Verzeichnis "/ usr / share / doc /" Enthält keine Website-Quellen.

Nachdem ich diese beiden geändert hatte, funktionierten alle. Interessanterweise hat Apache keine Fehler ausgegeben, sondern meine Website auf meinem Mac OS Sierra nicht stillschweigend geöffnet.

Konstantin Vahrushev
quelle
Gute Antwort, helfen Sie mir, ein ähnliches Problem zu finden. Alle Syntax und -S vhosts korrekt, immer noch falsche Site bedient. Es stellte sich heraus, dass: 80 und: 443 dieselbe Zugriffsprotokolldatei haben, was die Dinge zu verwirren schien. Separate Datei für jeden Port und Sites funktionierten.
David McNeill