У меня есть несколько сайтов, настроенных как VirtualHosts с использованием Apache, которые некоторое время работают нормально. Недавно я изменил имя хоста сервера на одно из обслуживаемых доменных имен, а также добавил его в / etc / hosts, указывающий на внешний IP-адрес сервера.
С тех пор, как я это сделал, доступ к домену с моего ноутбука приводит меня к настройке Apache по умолчанию: «Это работает!» страница. Если я удалю 000-default из / etc / apache2 / sites-enabled /, он отобразит правильный сайт. Попытка получить доступ к сайту с www. префикс переводит меня на нужный сайт независимо от того, включен ли 000-default на сайтах с включенной поддержкой.
Исходя из всего этого, я предполагаю, что конфигурация по умолчанию обслуживает страницу по умолчанию из-за того, как я настроил имя хоста или / etc / hosts (или оба), но я не могу понять, как отключить это, пока оставив эти настройки как есть. Любые предложения приветствуются!
Изменить - Моя текущая конфигурация VirtualHost выглядит так:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin me@domain.com
DocumentRoot /srv/www/domain
ErrorLog /srv/www/domain/logs/error.log
CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>
Подвести итоги: У меня настроено несколько VirtualHosts, и это единственный не работает должным образом. Я могу получить доступ http://www.domain.com просто отлично, но http://domain.com переводит меня к Apache по умолчанию "Это работает!" страница. Если я отключу конфигурацию 000 по умолчанию, она покажет правильную страницу. Это началось только после того, как я установил имя хоста сервера на domain.com и добавил строку в / etc / hosts, указывающую domain.com на внешний IP-адрес сервера. Я бы хотел оставить их такими, если возможно.
Редактировать: Я побежал apache2ctl -S
поскольку /usr/sbin/apache2 -S
дал мне "apache2: неправильное имя пользователя $ {APACHE_RUN_USER}". Вот результат:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server domain.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
На днях потерял этот вопрос.
Если у вас есть контейнер <VirtualHost> без компонента ServerName, он будет использовать имя хоста по умолчанию. Поскольку 000-default, вероятно, не имеет компонента ServerName и включается первым в алфавитном порядке, поэтому он отвечает за hostname.com и не позволяет вашему явно объявленному имени хоста работать.
У вас есть где-нибудь директива NameVirtualHost *: 80?
Пытаться:
/usr/sbin/apache2 -S
Это расскажет вам, как apache анализирует файл конфигурации. У вас есть конфиги с реальными IP-адресами или все с *? Вам не хватает: 80? Apache не любит их смешивать.
У вас есть ServerName domain.com или ServerAlias domain.com по умолчанию?
Проверьте ServerName и ServerAlias в директиве VirtualHost:
<VirtualHost *:80>
ServerName domain
ServerAlias www.domain.com
ServerAlias *.domain.com
</VirtualHost>
Читать: http://httpd.apache.org/docs/2.2/mod/core.html#serveralias, http://httpd.apache.org/docs/2.2/vhosts/
Это сработало:
<VirtualHost *:80>
DocumentRoot /var/www/www.mydomain.com
ServerName mydomain.com
ServerAlias www.mydomain.com
</VirtualHost>
когда у меня была опечатка, это НЕ сработало (директива ServerName дважды):
<VirtualHost *:80>
DocumentRoot /var/www/www.mydomain.com
ServerName mydomain.com
ServerName www.mydomain.com
</VirtualHost>
Когда у меня дважды была директива ServerName, она продолжала преобразовываться в первый указанный сайт (здесь не показан).
надеюсь, это поможет кому-то ...
У меня была аналогичная проблема, и я решил ее, явно указав ServerName в основном файле httpd.conf, вместо того, чтобы позволить apache автоматически определить, что это было. Я предполагаю, что то, что решил apache, было таким же, как мой vhost (определено позже), поэтому значение по умолчанию «победило», переопределив настройку vhost.
Я просто установил httpd.conf ServerName на имя хоста, которое есть у машины, я никогда не буду обслуживать веб-страницы.