Як налагодити конфігурацію віртуального хоста 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
Це дуже корисно, дякую, але цього недостатньо, у мене виникли проблеми з vhost, що він повинен бути використаний, і це не так, я не знаю чому, я хочу отримати журнали про те, як apache вибирає vhost.
Loenix

1
Чи є спосіб змусити Apache додати повідомлення у файл помилок чи в іншому місці, коли фактичний доступ надходить для віртуального або основного хоста, що дає динамічну інформацію про те, який хост обраний? Я спробував LoadModule модулі log_debug_module / mod_log_debug.so ... LogMessage "Налагодження 1" гачок = все
David Spector

28

Ось така команда, на мою думку, може допомогти:

apachectl -t -D DUMP_VHOSTS

Ви отримаєте список усіх vhosts, ви будете знати, який з них є типовим, і переконаєтесь, що ваш синтаксис правильний (те саме, що налаштування apachectl, запропоноване 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 /" Не містив джерел веб-сайту.

Після того як я змінив цих двох, все працювало. Цікаво, що апачі не видав жодних помилок, просто не відкрив мого веб-сайту мовчки на моїй Mac OS Sierra.


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