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

9

У меня есть несколько сайтов, настроенных как VirtualHosts с использованием Apache, которые какое-то время работали нормально. Недавно я изменил имя хоста сервера на одно из обслуживаемых доменных имен, а также добавил его в / etc / hosts, указывая на внешний IP-адрес сервера.

Поскольку я это сделал, доступ к домену с моего ноутбука приводит меня к настройке Apache по умолчанию «Это работает!» стр. Если я удаляю 000-default из / etc / apache2 / sites-enabled /, он отображает правильный сайт. Попытка получить доступ к сайту с помощью «www.» Префикс выводит меня на правильный сайт, независимо от того, включено ли значение по умолчанию 000 для сайтов.

Исходя из всего этого, я предполагаю, что конфигурация по умолчанию обслуживает страницу по умолчанию из-за того, как я настроил имя хоста или / 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>

Подводя итог: у меня настроено несколько виртуальных хостов, и это единственный, который не работает должным образом. Я могу получить доступ к 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
Джон Дебс
источник
domain.com используется в основном файле httpd.conf как ServerName? или apache2ctl.conf вы, кажется, используете Ubuntu, поэтому он может отличаться по имени.
Prix

Ответы:

12

Потерял этот вопрос на днях.

Если у вас есть контейнер <VirtualHost> без компонента ServerName, он будет использовать имя хоста по умолчанию. Поскольку 000-default, вероятно, не имеет компонента ServerName и является первым включаемым в алфавитном порядке, поэтому он отвечает за hostname.com и не позволяет вашему явно объявленному имени хоста работать.

karmawhore
источник
Понятно, есть ли способ это исправить? Я хочу, чтобы конфигурация по умолчанию обрабатывала любые необработанные домены, но я не хочу, чтобы он обрабатывал этот конкретный домен.
Джон Дебс
предоставьте ему домен, отличный от того, который используется в конфигурации, или переименуйте его в zzz-default, чтобы он назывался последним.
karmawhore
Ладно, думаю, теперь я все понимаю. Я пробовал zzz-default, но это не то поведение, которое я хотел. Настройка ServerName example.comв конфигурации по умолчанию работает отлично, хотя. Спасибо!
Джон Дебс
4

У вас есть где-нибудь директива NameVirtualHost *: 80?

Пытаться:

/usr/sbin/apache2 -S

Это скажет вам, как apache анализирует файл конфигурации. У вас есть конфиги с реальными IP-адресами или у всех есть *? Есть ли у вас пропустить: 80? Apache не любит смешивать их.

Есть ли у вас ServerName domain.com или ServerAlias ​​domain.com по умолчанию?

karmawhore
источник
Да, у меня есть это в моем /etc/apache2/posts.conf. Я добавлю резюме к вопросу, которое, надеюсь, сделает его более понятным.
Джон Дебс
Моя конфигурация по умолчанию 000 не трогана, у нее нет директив ServerName или ServerAlias.
Джон Дебс
NameVirtualHost устарела.
Сэм
0

Это сработало:

<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, она продолжала преобразовываться в первый из перечисленных сайтов (здесь не показан).

надеюсь, это кому-нибудь поможет ...

Сэм
источник
0

У меня была похожая проблема, и я исправил ее, явно указав имя сервера в главном файле httpd.conf, вместо того, чтобы позволить apache автоматически выяснить, что это было. Я предполагаю, что решение Apache было таким же, как мой vhost (определено позже), поэтому по умолчанию один "победил", переопределяя настройку vhost.

Я просто установил в httpd.conf ServerName имя хоста, которое есть у машины, для которого я никогда не буду обслуживать веб-страницы.

sstteevvee
источник