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

я пытаюсь настроить виртуальный хост помимо default 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 webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
test.conf:
<VirtualHost test:80>
        ServerAdmin test@localhost
        ServerName test
        NameVirtualHost test
        ServerAlias test
        DocumentRoot /var/www/test
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

11 ответов


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

sudo a2dissite 000-default.conf

tl; dr: называют его судо: sudo service apache2 reload


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

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

попытаться достичь http://test: не работает

user@Laptop:/etc/apache2/sites-available$ sudo service apache2 reload
 * Reloading web server apache2                                                  * 
user@Laptop:/etc/apache2/sites-available$

попытаться достичь http://test: работающего

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


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

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

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


если вы уже пробовали следующее:
1. Проверено разрешение корневой и родительской папки документа.
2. a2dissite 000-по умолчанию и т. д.
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/журнал/apache2 не/other_vhosts_access.бревно==

Вы заметите, что вместо xxx.xx.xx.xx: 80 как типичный IP-адрес
У меня есть некоторые FQDN, такие как " ip-xxx-xx-xx-xx.ЕС-Запад-2.вычислить.внутренний: 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
...

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

устранение:
Добавьте *: 80 в тег VirtualHost, чтобы он выглядел так:

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


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

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


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

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

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

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

service apache2 restart

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

sudo service apache2 restart

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


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

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

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

Он должен по крайней мере предупредить, если команда не казнен!!!


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


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

другими словами, если мой/etc / hostname был:

apple

и в моих/etc / хостах у меня было:

192.168.54.34 apple.example.com apple

и в моем /etc/apache2/sites-enabled / apple.пример.com.conf I имел:

<VirtualHost *:80>
    ServerAdmin blah@apple.example.com
    ServerName apple.example.com
    DocumentRoot /var/www/apple.example.com
    DirectoryIndex index.html index.php
</VirtualHost>

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

server1

и /etc/hosts-файл:

192.168.54.34 server1.example.com server1

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

Listen 80

Так что настройки что-то вроде:

Listen 80
<VirtualHost *:80>
    ServerAdmin admin@example.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>