Как отладить конфигурацию виртуального хоста apache?


138

Еще раз, у меня проблема с моей конфигурацией виртуального хоста apache. (Конфигурация по умолчанию используется вместо моей конкретной).

Проблема не в неправильной конфигурации, а в том, как ее решить.

У кого-нибудь есть хорошие советы, чтобы быстро решить эту проблему?

Еще немного информации.

Conf-файл по умолчанию выглядит так:

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>

И конфигурация виртуального хоста, которая не применяется, это:

<VirtualHost *:*>

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

</VirtualHost>

Ответы:


198

Проверка синтаксиса

Чтобы проверить файлы конфигурации на наличие синтаксических ошибок:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Список виртуальных хостов

Чтобы перечислить все виртуальные хосты и их местоположение:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

5
-Sэто синоним, -t -D DUMP_VHOSTSтак что эти два одинаковы
aron.duby

2
Для Windows (если вы используете xampp) у вас есть те же команды по адресу: \ xampp \ apache \ bin
Jahmic

Для Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102

2
Это очень полезно, спасибо, но этого недостаточно, у меня возникли некоторые проблемы с виртуальным хостом, что его следует использовать, и я не знаю почему, я хочу получить логи о том, как apache выбирает виртуальный хост.
Loenix

1
Есть ли способ заставить Apache добавить сообщение в файл ошибок или в другое место, когда для виртуального или основного хоста приходит фактический доступ, дающий динамическую информацию о том, какой хост был выбран? Я пробовал LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Отладка 1" hook = all
Дэвид Спектор

28

Вот команда, я думаю, может помочь

apachectl -t -D DUMP_VHOSTS

Вы получите список всех vhosts, вы будете знать, какой из них по умолчанию, и вы убедитесь, что ваш синтаксис правильный (такой же, как apachectl configtest, предложенный yojimbo87).

Вы также будете знать, где каждый vhost объявлен. Это может быть удобно, если ваши файлы конфигурации беспорядок. ;)


24

Если вы пытаетесь отладить конфигурацию вашего виртуального хоста, вам может пригодиться ключ командной строки Apache -S. То есть введите следующую команду:

httpd -S

Эта команда выведет описание того, как Apache проанализировал файл конфигурации. Тщательная проверка IP-адресов и имен серверов может помочь выявить ошибки конфигурации. ( Другие документы командной строки см. В документации по программе httpd ).


9
В Apache2 этоapache2ctl -S
artfulrobot

1
или поочередноAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
Rleir

12

Сначала проверьте файлы конфигурации на наличие синтаксических ошибок, apachectl configtestа затем просмотрите журналы ошибок Apache .


У меня нет синтаксической ошибки, потому что мой сервер перезагружается и перезагружает конфигурацию без каких-либо проблем. Я не знаю, в каком журнале я мог найти детали о моей конфигурации.
GaetanZ

Журналы ошибок обычно находятся в файле /var/log/apache2/error.log.
yojimbo87

Вы также можете использовать «apache2ctl -t».
Ларри Сильверман

11

У меня был новый файл конфигурации VirtualHost, который не отображался при использовании apachectl -Sкоманды. После долгих царапин я понял, что в моем файле нет суффикса ".conf". Как только я переименовал файл с этим суффиксом, мой Vhost начал показывать и работать!


8

У меня недавно были некоторые проблемы с VirtualHost. Я использовал, a2ensiteчтобы включить хост, но перед запуском перезапуска (который мог бы убить сервер при сбое) я запустил

apache2ctl -S

Что дает вам некоторую информацию о том, что происходит с вашими виртуальными хостами. Это не идеально, но это помогает.


3

Я нашел свою собственную ошибку, я не добавил имя файла журнала: ErrorLog / var / log / apache2
И этот путь: Каталог "/ usr / share / doc /" Не содержит источников на сайте.

После того как я поменял эти два, все заработало. Интересно, что apache не выдавал никаких ошибок, просто не открывал мой сайт на моем Mac OS Sierra.


Хороший ответ, помогите мне найти похожую проблему. Весь синтаксис и -S vhosts правильный, все равно неправильный сайт обслуживается. Оказалось, что: 80 и: 443 имеет один и тот же файл журнала доступа, который, казалось, запутал вещи. Отдельный файл для каждого порта, и сайты начали работать.
Дэвид Макнил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.