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

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

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

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

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

Файл конфигурации по умолчанию такой:

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>

person GaetanZ    schedule 29.03.2011    source источник
comment
Проверки DNS также полезны, например. flushdns coolestguidesontheplanet.com/clear-the-local-dns-cache- in-osx hostinger.com/tutorials/how-to-flush -днс   -  person Wolfgang Fahl    schedule 28.09.2020


Ответы (8)


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

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

# 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
person sqren    schedule 27.09.2011
comment
-S является синонимом -t -D DUMP_VHOSTS, так что это одно и то же. - person aron.duby; 20.01.2015
comment
Для Windows (если вы используете xampp) у вас есть те же самые команды по адресу: \xampp\apache\bin - person Jahmic; 06.12.2015
comment
Для Вампа: c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S - person Lg102; 28.12.2015
comment
Это очень полезно, спасибо, но этого недостаточно, у меня возникла проблема с виртуальным хостом, который нужно использовать, а не использовать, я не знаю почему, я хочу получить журналы о том, как apache выбирает виртуальный хост. - person Loenix; 12.11.2016
comment
Есть ли способ заставить Apache добавить сообщение в файл ошибок или в другое место, когда фактический доступ поступает к виртуальному или основному хосту, предоставляя динамическую информацию о том, какой хост был выбран? Я пробовал LoadModule log_debug_module modules/mod_log_debug.so... LogMessage Debug 1 hook=all - person David Spector; 16.11.2017
comment
Windows нашел это (на консоли git basch): ./httpd.exe -S - person Rubén Ruíz; 14.05.2021

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

apachectl -t -D DUMP_VHOSTS

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

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

person Arnaud Massé    schedule 29.08.2013

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

httpd -S

Эта команда выведет описание того, как Apache проанализировал файл конфигурации. Внимательное изучение IP-адресов и имен серверов может помочь выявить ошибки конфигурации. (Другие параметры командной строки см. в документации по программе http://httpd.apache.org/docs/2.2/programs/httpd.html).

person Michael Spector    schedule 09.06.2013
comment
В Apache2 это apache2ctl -S - person artfulrobot; 05.07.2013
comment
или альтернативно APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S - person rleir; 19.08.2013

Сначала проверьте файлы config на наличие синтаксических ошибок с apachectl configtest, а затем просмотрите ошибку apache < href="http://httpd.apache.org/docs/current/logs.html" rel="noreferrer">журналы.

person yojimbo87    schedule 29.03.2011
comment
У меня нет синтаксической ошибки, потому что мой сервер без проблем перезагружается и перезагружает конфигурацию. Я не знаю, в каком журнале можно найти подробности о моей конфигурации. - person GaetanZ; 31.03.2011
comment
Журналы ошибок обычно находятся в файле «/var/log/apache2/error.log». - person yojimbo87; 31.03.2011
comment
Вы также можете использовать apache2ctl -t. - person Larry Silverman; 18.01.2013

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

person GreensterRox    schedule 07.05.2016

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

apache2ctl -S

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

person Jacksonkr    schedule 05.03.2014

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

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

person Konstantin Vahrushev    schedule 18.03.2017
comment
Хороший ответ, помогите мне найти похожую проблему. Весь синтаксис и -S vhosts верны, все равно обслуживается неправильный сайт. Оказалось, что :80 и :443 имеют один и тот же файл журнала доступа, что, казалось, сбивало с толку. Отдельный файл для каждого порта, и сайты заработали. - person David McNeill; 10.05.2020

очень важным инструментом является

apachectl -t -D DUMP_INCLUDES

он показал мне, что файл, который я исправлял и исправлял, на самом деле был включен в файл, который сам по себе не был включен.

спасибо всем

person alex    schedule 07.05.2021