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

Apache не может найти виртуальный хост, если домен совпадает с полным доменным именем сервера

В Apache у меня был настроен vhost с ServerName host1.example.com

В / etc / hosts есть запись для host1

127.0.1.1 host1.example.com host1

И в / etc / hostname

host1

Это способ создания полного доменного имени в Debian / Ubuntu.

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

При запуске nginx с vhost для host1.example.com у него нет проблем с получением заголовка Host и использованием правильного vhost.

Но при использовании Apache у него есть проблемы, он всегда использует 000-default. Удаление 000-default заставляет его переключиться на следующий vhost, а удаление всего, кроме файла vhost для домена, с которым я хочу работать, наконец, заставляет его работать.

NameVirtualHost имеет значение *

В журналах нет сообщений об ошибках, нет перекрывающихся виртуальных хостов, и конфигурация vhost в порядке.

<VirtualHost *>
        ServerAdmin webmaster@localhost
        ServerName host1.example.com

        DirectoryIndex index.php index.htm index.html
        DocumentRoot /var/www/host1.example.com

        <Directory />
            Options FollowSymLinks Includes -Indexes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>

У кого-нибудь есть идеи?

Редактировать:

apache -t -D DUMP_VHOSTS вывод:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    is a NameVirtualHost
         default server the.server.fqdn (/etc/apache2/sites-enabled/000-default:1)
         port * namevhost the.server.fqdn (/etc/apache2/sites-enabled/000-default:1)
         port * namevhost host1.example.com (/etc/apache2/sites-enabled/host1.example.com:1)
Syntax OK

Что ж, похоже, на этот вопрос нет реального ответа, это может быть только вещь Debian / Ubuntu, основанная на том, как они разрешают свое собственное FQDN.

Я обнаружил, что простое комментирование хоста и разрешения FQDN в / etc / hosts решило проблему.

#127.0.1.1 host1.example.com host1

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

Самым простым решением для меня было добавить одну строку в 000-default:

ServerName localhost

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

Всякий раз, когда Apache вызывает неправильный vhost, httpd -t -D DUMP_VHOSTS обычно довольно хорошо указывает, в чем проблема.