Назад | Перейти на главную страницу

Apache не соблюдает директиву ServerName для определенного сайта

У меня есть несколько сайтов, настроенных как 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 на имя хоста, которое есть у машины, я никогда не буду обслуживать веб-страницы.