Подтвердить что ты не робот

VirtualHost всегда возвращает хост по умолчанию с Apache на Ubuntu 14.04

Я пытаюсь настроить виртуальный хост, кроме стандартного localhost. Всякий раз, когда я пытаюсь вызвать мой виртуальный хост http://test, я получаю индексный файл Apache2 по умолчанию, который находится в каталоге http://localhost. Кроме того, apache возвращает эту страницу еще после отключения (a2dissite), и файлы VirtualHost перезагружают apache (service apache2 reload).

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

Конфигурация:

Моя структура каталогов такова:

/var/www/html                  # Default localhost dir
/var/www/html7index.html       # Apache2 default index

/var/www/test                  # HTML dir for the virtual host
/var/www/test/index.html       # My "website" 

Содержимое /etc/hosts:

127.0.0.1       localhost
127.0.1.1       Laptop
127.0.0.1       test

Содержимое каталога /etc/apache2/sites-available:

000-default.conf
default-ssl.conf
test.conf

Файл 000-default.conf:

<VirtualHost localhost:80>
        ServerName localhost
        ServerAdmin [email protected]
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Файл test.conf:

<VirtualHost test:80>
        ServerAdmin [email protected]
        ServerName test
        NameVirtualHost test
        ServerAlias test
        DocumentRoot /var/www/test
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
4b9b3361

Ответ 1

tl; dr: Назовите его sudo: sudo service apache2 reload


Похоже, что поведение service apache2 reload обмануло меня. См. Следующий журнал:

[email protected]:/etc/apache2/sites-available$ sudo a2ensite test.conf 
Enabling site test.
To activate the new configuration, you need to run:
  service apache2 reload
[email protected]:/etc/apache2/sites-available$ service apache2 reload
 * Reloading web server apache2                                                  * 
[email protected]:/etc/apache2/sites-available$

Попробуйте достичь http://test: НЕ работает

[email protected]:/etc/apache2/sites-available$ sudo service apache2 reload
 * Reloading web server apache2                                                  * 
[email protected]:/etc/apache2/sites-available$

Попробуйте достичь http://test: РАБОТА

Итак, найдите разницу! Дело в том, что я думал, что он будет правильно загружен в первую очередь. В файлах журналов также нет записей. Вызов с помощью sudo помог. Это ошибка?

Ответ 2

Я столкнулся с этой проблемой, и оказалось, что мне пришлось отключить виртуальный хост по умолчанию.

sudo a2dissite 000-default.conf

Возможное расширение:

Согласно документации apache Подробное обсуждение соответствия виртуальных хостов:

[...] Если на этом этапе главный сервер не имеет имя_сервера, вместо него используется имя хоста компьютера, на котором работает httpd.

Это означает, что если для vhost по умолчанию (обычно 000- default.conf) не задано имя_сервера (что является значением по умолчанию), Apache откатится к имени хоста операционной системы.

В результате Apache выбирает и обслуживает из vhost по умолчанию (000- default.conf), даже если настроен другой созданный пользователем vhost с тем же ServerName, что и имя хоста компьютера.

Причина в том, что Apache сортирует vhosts в алфавитном порядке по имени файла и выбирает первую конфигурацию vhost, которая соответствует запрошенному заголовку HTTP Host. Таким образом, default.conf 000- проверяется перед пользовательскими vhosts, поскольку они обычно не имеют префикса 000-.

Ответ 3

Просто указав на это, это может быть очевидно для опытных пользователей, но не так много, если вы первый таймер.

Убедитесь, что конфигурация, которую вы используете в /sites-enabled заканчивается на .conf как и ожидалось в вашем apache2.conf

Это была моя проблема, и она это исправила.

Ответ 4

Если вы уже пробовали следующее:
1. Проверяемые разрешения корневой папки и родительской папки.
2. a2dissite 000-default и т.д.
3. Перезапуск apache с sudo-сервисом apache2 reload
И он по-прежнему не работает, тогда выполните следующие действия:

1. Включить ведение журнала отладки:
vi /etc/apache2/apache2.conf

LogLevel debug

2. Перезапустите apache2 и просмотрите журналы
sudo service apache2 restart

tail -f /var/log/apache2/*.log

3. Обратите внимание, если IP-адрес сервера отображается в журналах, как ожидалось:

== > /var/log/apache2/other_vhosts_access.log &lt == == ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80 xx.78.xx.2xx - - [13/Sep/2017: 18: 40: 44 +0100] "GET/HTTP/1.1" 200 3509 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 55.0) Gecko/20100101 Firefox/55.0"

Вы заметите, что вместо xxx.xx.xx.xx: 80, как обычный IP-адрес
У меня есть полное FQDN, например, "ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80"
Я использую AWS Elastic IP для создания фиксированного IP-адреса для моего веб-сервера Amazon EC2.

4. Проверьте главу вашего файла .conf вашего виртуального хоста

<VirtualHost 127.0.0.1:80 11.22.33.44:80>
# Added from nessus to make more secure
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ServerName mydomain.com
...

Итак, что мы видим здесь, мы говорим, что Apache обслуживает этот vhost для запросов от 127.0.0.1 или 11.22.33.44 на порту 80. Но сервер никогда не видит эти IP-адреса, поскольку он получает это странное FQDN, и поэтому он никогда Матчи! Эврика!

РЕШЕНИЕ:
Добавьте *: 80 в тег VirtualHost, чтобы он выглядел так:

<VirtualHost 127.0.0.1:80 11.22.33.44:80 *:80>


И перезапустите apache. Надеюсь, это поможет. Могут быть и другие причины, но если это причина вашей проблемы, тогда пришло время отдохнуть, выпить чашечку чая и расслабиться! Если нет, то надеюсь, что вы найдете решение.

PS. Не забудьте вернуть свои журналы для предупреждения, а не отладки!

Ответ 5

Я просмотрел все эти решения, и никто из них не работал. Затем я решил вернуться и проверить файл apache2.conf. Я обнаружил, что строка, включающая файлы conf с включенными сайтами, была закомментирована по умолчанию. Раскомментировав строку и перезапустив apache, она исправила мою проблему (она была близка к концу файла):

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf 

Ответ 6

он тоже меня заводил, я снова и снова щелкал мои файлы .conf, все было абсолютно правильно определено. Я закончил на этом посту, попробовал команды a2ensite и a2dissite как sudoer, перезапустив apache, все еще приземляясь на приветственной странице apache по умолчанию, как если бы apache никогда не отключил сайт по умолчанию или не принял мой новый виртуальный хост на борту.

Оказывается, я пытался перезапустить apache без использования sudo...

service apache2 restart

использовать

sudo service apache2 restart

Ответ 7

если вы по умолчанию используете *: 80; *.443 убедитесь, что он находится внизу - поэтому переименуйте 000-по умолчанию на zzz-default

Ответ 8

Это укусило меня не один раз; иногда я бы включил с помощью sudo - иногда я бы этого не делал.

Ubuntu 14.04, похоже, отображает одно и то же сообщение в любом случае. Когда вы двигаетесь со скоростью 100 миль в час, иногда вы пропускаете sudo или два.

Симптом нового веб-сайта, по умолчанию вернувшегося к неправильному каталогу, был моим единственным ключом, которого никогда не было. Я бы сказал, что это ошибка.

Он должен хотя бы предупредить, когда команда не выполнена!!!

Ответ 9

Для меня он начал работать после перезапуска apache с помощью: sudo service apache2 reload. И нажатие ctrl + F5 на http:/test.

Ответ 10

Я видел, как это произошло при использовании полного доменного имени (FQDN) в файле /etc/hosts, который совпадает с сайтом, к которому я пытался подключиться. Чтобы решить эту проблему, мне пришлось переименовать полное доменное имя для чего-то другого, кроме одного из значений моего VirtualHost ServerName.

Иными словами, если мое /etc/hostname было:

apple

И в моем /etc/hosts у меня было:

192.168.54.34 apple.example.com apple

И в моем /etc/apache 2/sites-enabled/apple.example.com.conf у меня было:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName apple.example.com
    DocumentRoot /var/www/apple.example.com
    DirectoryIndex index.html index.php
</VirtualHost>

apple.example.com будет принят 000-default.conf, так как он также указан в файле /etc/hosts. Чтобы решить эту проблему, я просто изменил полное доменное имя моего сервера следующим образом в файле /etc/hostname:

server1

и/etc/hosts:

192.168.54.34 server1.example.com server1

Ответ 11

В моем случае на Apache 2.4 проблема была решена путем добавления ниже настроек к конфигурации виртуального хоста:

Listen 80

чтобы настройки выглядели примерно так:

Listen 80
<VirtualHost *:80>
    ServerAdmin [email protected].com
    ServerName testsite.com
    ServerAlias www.testsite.com
    DocumentRoot /var/www/testsite
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ответ 12

Вам необходимо заменить html файл по умолчанию (/var/www/html/index.html) на свой сайт или переименовать файл в что-то вроде index.html.bak. По какой-то причине apache по умолчанию использует index.html, если вы его не измените.