Не работают саб-домены после создания WildCard DNS

Хотел рассказать Вам о проблеме существующих саб-доменов и 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.

blizhnie.ru

One Comment

Добавить комментарий

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>