В 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
обычно довольно хорошо указывает, в чем проблема.