Итак, у меня был бесплатный домен .gq, срок действия которого истекает через несколько дней, поэтому я купил домен .xyz. Что мне нужно изменить в Apache (Debian), чтобы все работало так, как всегда?
Я уже изменил файлы конфигурации виртуального хоста в /etc/apache/sites-available
, выполнил команду a2dissite NAME-OF-SUBDOMAIN.domain.gq
и a2ensite NAME-OF-SUBDOMAIN.domain.xyz
. Поддомены по-прежнему не работают. Каждый раз, когда я пытаюсь связаться с mail.domain.xyz, я попадаю на сайт www.domain.xyz.
Резюме:
Пример одного файла виртуального хоста (все остальные файлы vh имеют ту же схему):
<VirtualHost *:80>
ServerName pic.domain.xyz
DocumentRoot /var/www/pic/
</VirtualHost>
Теперь это работает. Я точно не знаю почему. Единственное, что я сделал, это apt update && apt upgrade -y
. Я не знаю, повлияло ли это на обновление, я проверил только через 2 часа после обновления.
Вы можете перечислить все настроенные и активные VirtualHost
с apache2ctl -S
. Список якобы такой:
*:80 is a NameVirtualHost
default server www.example.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost www.example.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost sub1.example.com (/etc/apache2/sites-enabled/sub1.example.com:1)
port 80 namevhost sub2.example.com (/etc/apache2/sites-enabled/sub2.example.com:1)
Эти имена хостов находятся в том же порядке, что и имена файлов в /etc/apache2/sites-enabled/
как на самом деле они изначально Include
d в /etc/apache2/apache2.conf
с участием Include sites-enabled/
.
Теперь, когда браузер отправляет свой HTTP-запрос, начинающийся с
GET / HTTP/1.1
Host: sub2.example.com
Apache проходит через настроенный ServerName
и ServerAlias
директивы и останавливается на первый матч. Если совпадений не найдено возвращается к первому виртуальному хосту (для которых имя хоста по умолчанию начинается с 000-
чтобы сделать его первым обработанным файлом).
Чтобы использовать DocumentRoot
и другие директивы, настроенные в файле sub2.example.com
ваша конфигурация должна соответствовать этим условиям:
/etc/apache2/sites-enabled/sub2.example.com
Должны быть ServerName sub2.example.com
000-default
и sub1.example.com
НЕ ДОЛЖЕН иметь sub2.example.com
или *.example.com
в ServerName
или ServerAlias
.Скорее всего у вас есть уже объявлено ServerAlias *.example.com
в файле конфигурации, где www.example.com
настроен.
Когда входящие запросы поступают на сервер Apache, он проверяет запрошенный заголовок «Host» в нем и ищет совпадения в директиве «ServerName» виртуальных хостов, которые у него есть, если не соответствует, первый определенный виртуальный хост ответит.
Коротко: Измените директиву ServerName на каждом виртуальном хосте чтобы убедиться, что запросы правильно доставляются на виртуальный хост, который они должны отправить.