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

Мое доменное имя изменилось, что мне нужно изменить в Apache?

Итак, у меня был бесплатный домен .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/ как на самом деле они изначально Included в /etc/apache2/apache2.conf с участием Include sites-enabled/.

Теперь, когда браузер отправляет свой HTTP-запрос, начинающийся с

GET / HTTP/1.1
Host: sub2.example.com

Apache проходит через настроенный ServerName и ServerAlias директивы и останавливается на первый матч. Если совпадений не найдено возвращается к первому виртуальному хосту (для которых имя хоста по умолчанию начинается с 000- чтобы сделать его первым обработанным файлом).

Чтобы использовать DocumentRootи другие директивы, настроенные в файле sub2.example.com ваша конфигурация должна соответствовать этим условиям:

  1. /etc/apache2/sites-enabled/sub2.example.comДолжны быть ServerName sub2.example.com
  2. Любой из предыдущих файлов конфигурации, т.е. 000-default и sub1.example.com НЕ ДОЛЖЕН иметь sub2.example.com или *.example.com в ServerName или ServerAlias.

Скорее всего у вас есть уже объявлено ServerAlias *.example.com в файле конфигурации, где www.example.com настроен.

Когда входящие запросы поступают на сервер Apache, он проверяет запрошенный заголовок «Host» в нем и ищет совпадения в директиве «ServerName» виртуальных хостов, которые у него есть, если не соответствует, первый определенный виртуальный хост ответит.

Коротко: Измените директиву ServerName на каждом виртуальном хосте чтобы убедиться, что запросы правильно доставляются на виртуальный хост, который они должны отправить.