Не работают саб-домены после создания WildCard DNS
Хотел рассказать Вам о проблеме существующих саб-доменов и WildCard DNS. Множество раз встречал ситуации, когда клиенты различных хостингов обращаются в тех.поддержку с проблемой нерабочих саб-доменов, после создания WildCard DNS.
Поэтому хочу немного рассказать Вам о работе веб-сервере.
Пускай это будет Apache, та в прочем и любой другой. Главная мысль которую я хочу Вам донести звучит так — веб-сервер работает с верху донизу. Что же это значит? А вот что, при обращении к веб-серверу, он начинает читать свой конфиг файл в поисках нужного Виртуал Хоста (VirtualHost), и как только он находит первый хост, соответствующий запросу, он перестает искать дальше. И ему абсолютно все равно что находится дальше. Точно также с чтением правил с .htaccess. Если в самом вверху .htaccess’a у Вас стоит редирект куда-то в гагры, а уже ниже какие-то СЕО линки или там хот-ликн защита, то сайт все равно будет перенаправлен в гагры, а все правила что идут ниже проигнорированы.
Давайте рассмотрим конкретный случай:
У Вас есть домен yourdomain.ru который прекрасно работает, и в какой-то момент этой прекрасной работы Вы создали несколько саб-доменов sub1.yourdomain.ru sub2.yourdomain.ru sub3.yourdomain.ru
В конфиг файле веб-сервера это выглядит следующим образом:
Конфиг домена yourdomain.ru
<VirtualHost 65.65.65.65:80>
ServerName yourdomain.ru
ServerAlias www.yourdomain.ru
DocumentRoot /home/username/public_html
…
</VirtualHost>
Конфиг саб-домена sub1.yourdomain.ru
<VirtualHost 65.65.65.65:80>
ServerName sub1.yourdomain.ru
ServerAlias www.sub1.yourdomain.ru
DocumentRoot /home/username/public_html/sub1
…
</VirtualHost>
Конфиг саб-домена sub2.yourdomain.ru
<VirtualHost 65.65.65.65:80>
ServerName sub2.yourdomain.ru
ServerAlias www.sub2.yourdomain.ru
DocumentRoot /home/username/public_html/sub1
…
</VirtualHost>
Конфиг саб-домена sub3.yourdomain.ru
<VirtualHost 65.65.65.65:80>
ServerName sub3.yourdomain.ru
ServerAlias www.sub3.yourdomain.ru
DocumentRoot /home/username/public_html/sub3
…
</VirtualHost>
Причем как правило, если все делалось правила, то порядок Виртуал Хостов (VirtualHost) будет именно таким как приведено выше, сначала сам домен а потом уже саб-домены.
И тут Вам захотелось установит WordPress MU для саб-доменов или что-то в этом духе и Вы создаете WildCard DNS и прописываете его в апаче. Дальше пойдет речь именно о том, о чем гласит заголовок поста.
Возможные ситуации:
1) Перестали работать старые саб-домены, тоесть работают как WildCard а не как отдельные домены
2) Старые саб-домены живут своей жизнью вместо того чтобы работать как WildCard
3) Домен с WWW начал работать как WildCard а не как алиас к домену
Теперь вспоминаем что я писал в начале, «веб-сервер работаем с верху донизу»
Все выше упомянутые проблемы вызваны положением Виртуал Хостов в конфиг файле апача.
1) Первая ситуация. Если Вы дописали WildCard (звездочку) в Виртуал Хост (VirtualHost) самого домена, который как мы уже говорили стоит в самом верху (перед саб-доменами)
<VirtualHost 65.65.65.65:80>
ServerName yourdomain.ru
ServerAlias www.yourdomain.ru *.yourdomain.ru
DocumentRoot /home/username/public_html
…
</VirtualHost>
В этом случае все саб-домены созданные ранее, будут работать как WildCard. Грубо говоря можно считать что их просто НЕТ. Потому что апач читает конфиг сверху вниз, и наткнувшись на конфиг домена, в котором прописан WildCard, он останавливается и не читает все что внизу.
Решение этой проблемы очень просто, перенести Виртуал Хост (VirtualHost) домена в конец конфига апача, тем самым Вы заставите апач читать конфиги Ваших саб-домен прежде конфига с WildCard. К тому же, я советую не дописывать WildCard в Виртул Хост (VirtualHost) домена, а создавать для этого отдельный Виртул Хост (VirtualHost). Просто скопируйте Виртул Хост (VirtualHost) домена и пропишите WildCard ( *.yourdomain.ru ) как ServerName и сохраните его в конце конфига сервера. Это избавит Вас от путаницы с доменами.
2) Вторая ситуация. Тут у нас все наоборот, Вы наверное уже и сами догадались что делать. Старые саб-домены работают как отдельные домены, потому что их Виртул Хосты (VirtualHost) стоят в конфиге апача перед Виртул Хостом (VirtualHost) где прописан WildCard. Для решения проблемы удалите старые саб-домены или же поставьте Виртул Хост (VirtualHost) с WildCard выше первого из старых саб-доменов.
3) Третья ситуация. Такое может возникнуть если сам домен yourdomain.ru и его WildCard (*.yourdomain.ru) направлены в разные папки, и конфиг с WildCard стоит в конфиге апача перед конфигом самого домена. Решение проблемы точно такое же как и в прошлых ситуациях, просто поменяйте Виртул Хосты (VirtualHost) местами.
Я понимаю что большинство пользователей виртуального общего хостига сделать все выше приведенное самостоятельно не могут и просто вынуждены обратится в тех. поддержку за помощью. И к нашему общему сожалению, неоднократно было замечено что эти несложные манипуляции проводились сотрудниками младшего сапорта без глубокого понимания последствий , и потом тратилось много времени на решение возникшей проблемы. Вроде бы что там дела, попросил создать WildCard, а форум, почта и прочие саб-домены отвалились xD Бывает всякое, надеюсь что прочитанное пригодится в вашей Хостинг Life.

Классная статья буду пробовать.