Jak debugować konfigurację wirtualnego hosta Apache?

138

Po raz kolejny mam problem z konfiguracją mojego wirtualnego hosta Apache. (Domyślna konfiguracja jest używana zamiast mojej konkretnej).

Problem nie polega na błędnej konfiguracji, ale na tym, jak ją rozwiązać.

Czy ktoś ma dobre rady, jak szybko rozwiązać tego rodzaju problem?

Więcej informacji.

Domyślny plik conf to ten:

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>

A konfiguracja wirtualnego hosta, która nie ma zastosowania, to ta:

<VirtualHost *:*>

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

</VirtualHost>
GaetanZ
źródło

Odpowiedzi:

198

Sprawdzenie składni

Aby sprawdzić pliki konfiguracyjne pod kątem błędów składniowych:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Lista wirtualnych hostów

Aby wyświetlić wszystkie wirtualne hosty i ich lokalizacje:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
źródło
5
-Sjest synonimem, -t -D DUMP_VHOSTSwięc te dwa są takie same
aron.duby
2
W systemie Windows (jeśli używasz xampp), masz te same polecenia w: \ xampp \ apache \ bin
Jahmic
Dla Wampa:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
To bardzo przydatne, dziękuję, ale to nie wystarczy, mam problem z vhostem, który powinien być używany, a nie jest, nie wiem dlaczego, chcę uzyskać dzienniki o tym, jak apache wybiera vhost.
Loenix
1
Czy istnieje sposób, aby Apache dodawał komunikat do pliku błędu lub w innym miejscu, gdy nadejdzie faktyczny dostęp do hosta wirtualnego lub głównego, podając dynamiczne informacje o tym, który host został wybrany? Wypróbowałem LoadModule log_debug_module moduły / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector
28

Oto polecenie, które moim zdaniem może być pomocne:

apachectl -t -D DUMP_VHOSTS

Otrzymasz listę wszystkich vhostów, będziesz wiedział, który z nich jest domyślny i upewnisz się, że twoja składnia jest poprawna (tak samo jak apachectl configtest sugerowany przez yojimbo87).

Dowiesz się również, gdzie jest zadeklarowany każdy vhost. Może się przydać, jeśli w plikach konfiguracyjnych panuje bałagan. ;)

Arnaud Massé
źródło
24

Jeśli próbujesz debugować konfigurację wirtualnego hosta, może okazać się przydatny przełącznik wiersza poleceń Apache -S. Oznacza to, że wpisz następujące polecenie:

httpd -S

To polecenie zrzuci opis sposobu, w jaki Apache przeanalizował plik konfiguracyjny. Dokładne sprawdzenie adresów IP i nazw serwerów może pomóc w wykryciu błędów w konfiguracji. (Zobacz dokumentację programu httpd, aby zapoznać się z innymi opcjami wiersza poleceń).

Michael Spector
źródło
9
W Apache2 jest toapache2ctl -S
artfulrobot
1
lub na przemianAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir
12

Najpierw sprawdź pliki konfiguracyjne pod kątem błędów składni, apachectl configtesta następnie przejrzyj dzienniki błędów Apache .

yojimbo87
źródło
Nie mam błędu składni, ponieważ mój serwer uruchamia się ponownie i ładuje konfigurację bez żadnego problemu. Nie wiem, w którym dzienniku mogłem znaleźć szczegóły dotyczące mojej konfiguracji.
GaetanZ
Dzienniki błędów zwykle znajdują się w pliku „/var/log/apache2/error.log”.
yojimbo87
Możesz także użyć „apache2ctl -t”.
Larry Silverman
11

Miałem nowy plik konfiguracyjny VirtualHost, który nie był wyświetlany podczas używania apachectl -Spolecenia. Po długim drapaniu głowy zdałem sobie sprawę, że mój plik nie ma rozszerzenia „.conf”. Kiedy zmieniłem nazwę pliku z tym przyrostkiem, mój Vhost zaczął się wyświetlać i działać!

GreensterRox
źródło
8

Niedawno miałem problemy z VirtualHost. Kiedyś a2ensitewłączałem hosta, ale przed uruchomieniem restartu (co spowodowałoby zabicie serwera w przypadku awarii) uruchomiłem

apache2ctl -S

Co daje ci trochę informacji o tym, co się dzieje z twoimi wirtualnymi hostami. Nie jest doskonały, ale pomaga.

Jacksonkr
źródło
3

Znalazłem swój błąd, nie dodałem nazwy pliku logu: ErrorLog / var / log / apache2
A ta ścieżka: Katalog "/ usr / share / doc /" Nie zawierał źródeł strony.

Po zmianie tych dwóch wszystko działało. Co ciekawe, apache nie generował żadnych błędów, po prostu nie otwierał po cichu mojej strony na moim Mac OS Sierra.

Konstantin Vahrushev
źródło
Dobra odpowiedź, pomóż mi znaleźć podobny problem. Cała składnia i -S vhosty są poprawne, nadal obsługiwana jest niewłaściwa witryna. Okazało się, że: 80 i: 443 mają ten sam plik dziennika dostępu, co wydawało się mylić sprawy. Oddzielny plik dla każdego portu i witryny zaczęły działać.
David McNeill