О доменах и сайтах. Виртуальный хостинг

версия для печати

С точки зрения пользователя "домен" и "сайт" - практически одно и тоже. Это потому, что переходя по адресам в браузере пользователь видит только верхушку айсберга. На самом деле разница между доменом и сайтом огромная. По сути это вообще не сравнимые понятия. В этой статье я попытаюсь растолковать, в первую очередь себе, в чем разница, и как вообще работает виртуальный хостинг.

Домен - символьное имя. До недавних пор в имени буквы могли быть только латинские. Тонкости национальных доменов я не беру в расчет, они картину не сильно меняют. Итак, домен - это имя и только. Прежде чем запутать вас окончательно, нужно отметить что понятие "домен" имеет и другие значения. Но все они не могут отождествляться с сайтом. В этой статье говоря о домене я подразумеваю символьное имя.

Сайт - это контент. Проще говоря, файлы и каталоги с информацией. Все это лежит на каком-нибудь компе у хостера, подключенного в общую сеть. А может и вообще храниться на флешке в кармане веб-дизайнера. Итак, сайт - это каталоги и файлы с общей смысловой организацией.

Так вот домен связан с каким-то конкретным каталогом сайта. Такая связь описана в конфигах веб-серверов, например в Apache. А чтобы браузер знал, у какого конкретно компа в сети спрашивать данные для домена, существует сеть DNS-серверов. В базах этих серверов записаны соответствия доменного имени и IP-адреса конечного компа.

Разрешение доменного имени в IP-адрес

Чтобы понять, как это работает, нужно сказать пару слов о DNS. Исторический очерк меня мало волнует. Сейчас дела обстоят так (упрощено): есть сравнительно маленькая сеть компов (DNS-серверов aka name-серверов) по всему миру, которая хранит списки доменных имен и соответсвующих им ip-адресов. Эта сеть построена в виде дерева: на самом верху - 13 серверов со списками доменных зон первого уровня - .ru .com .org .biz и т.д. Под ними - множество серверов со списками доменов второго уровня. Большие хостинговые компании предлагают вместе с хостингом хранение доменного имени второго уровня. Name-серверы (ns-серверы), которые нужно указывать при размещении сайта на хостинге - вот это самое оно. Домены третьего и больше уровней хранятся, как я понимаю, на тех же серверах, где и домены вторых уровней. Еще ниже могут быть DNS-сервера провайдеров или доменов других уровней.

Технически DNS-имя (домен) связано с ip-адресом. Это связь "многие-ко-многим", но об этом чуть ниже. Браузеры могут качать инфу по протоколу TCP/IP используя ip-адрес, а не символьное имя. Вводим DNS-имя в браузер, и начинается магия ;) Запрос на получение ip-адреса уходит на DNS-сервер провайдера. Если сервер не знает ip-адрес указанного имени, он передает запрос выше по дереву. Если никто не сможет вернуть ip-адрес, то итоге запрос приходит к старшему серверу зоны. Если первый уровень указанного домена не в его ведении, он передает запрос серверу, который отвечает за эту зону. Потом идет нисходящий поиск, пока не будет найден ip-ник или выяснится, что адрес не зарегистрирован.

Пример: http:\\sub.somesite.ru\articles\text.htm
Беру простой случай, без редиректов и хитростей mod_rewrite. Здесь "sub.somesite.ru" - это доменный адрес сайта. Этому домену соответствует каталог на сервере у того хостера, на котором размещен контент (сайт) с таким адресом. В этом каталоге есть каталог "articles" и в нем файл "text.htm".

Браузер посылает запрос: "дайте данные по адресу http:\\sub.somesite.ru\articles\text.htm". Запрос уходит на DNS-сервера. Они разбираются, кто знает ip-адрес указанного домена, возвращают браузеру. Затем браузер уже по ip-адресу обращается к машине "дай файл sub.somesite.ru\articles\text.htm". На ней стоит web-сервер, который определяет, какой каталог связан с заявленным доменом, где именно эти данные лежат и посылает по сети браузеру файл text.htm.

Еще нужно отметить, что DNS-серверы могут кешировать запросы на получение ip-адреса для ускорения ответа. Такие сервера называются рекурсивными. Другой вариант ускорить разрешение имен - прописать соответствие ip-адреса и домена в файле HOSTS на машине пользователя. Для WinXP такой файл может лежать в [c:\WINDOWS\system32\drivers\etc\hosts]

Виртуальный хостинг через веб-сервер Apache

Принцип: один IP-адрес может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов. Это называется виртуальный хостинг. Обратное тоже справедливо — одному имени может быть сопоставлено множество IP-адресов. Это позволяет создавать балансировку нагрузки.

Итак, доменное имя ведет к серверу по IP-адресу. Там лежит каталог с контентом, связанный через веб-сервер с доменом. Благодаря виртуальным хостам веб-сервера Apache на один ip-ник может быть привязано много сайтов. На локальной машине я мог назначить один ip-адрес различным доменам второго уровня. А мог бы и вообще любым символьным именам один ip прикрутить. В глобальной сети нужно придерживаться некоторых ограничений, типа "нельзя создать домен первого уровня" и т.п. Приведу несколько примеров.

#1: Домен и поддомены связаны с одним и тем же сайтом

<VirtualHost 77.221.130.44:80>
    ServerName waredom.ru
    ServerAlias www.waredom.ru *.waredom.ru
    DocumentRoot /home/www/userXXX/somesite
</VirtualHost>

Если в браузере указать "http://waredom.ru" или, например, "http://blog.waredom.ru", то Apache вернет индексную страницу из каталога [/home/www/userXXX/somesite]

#2: Домен и поддомен связаны с разными каталогами и указывают на разные сайты.

<VirtualHost 77.221.130.44:80>
    ServerName waredom.ru
    DocumentRoot /home/www/userXXX/somesite
</VirtualHost>

<VirtualHost 77.221.130.44:80>
    ServerName sub.waredom.ru
    DocumentRoot /home/www/userYYY/anothersite
</VirtualHost>

Пишем в браузере "http://waredom.ru", попадаем на один сайт, пишем "http://sub.waredom.ru" - попадаем на другой.

#3: Домен somesite.ru вместе со своими поддоменами, а так же домен othername.com указывают на один сайт.

<VirtualHost 77.221.130.44:80>
    ServerName somesite.ru
    ServerAlias othername.com *.somesite.ru
    DocumentRoot /home/www/dir1/some
</VirtualHost>

Вбиваем в браузере "http://somesite.ru" или "http://othername.com", попадаем на один и тот же сайт.

Пару слов о хитрых хостерах

Мой хостер - Infobox.ru. Его в пример и возьму, т.к. на нем я разбирался с поддоменами. Опция ServerAlias позволяет связать много доменных имен с одним и тем же каталогом. Возможность связывать множество доменов с одним сайтом объясняет, как привязывают "www.", как заводят несколько доменных имен для одного сайта (например в зоне .ru и .com). Именно эта возможность настраивается на Infobox.ru в настройках сайта, и об этом написано в тарифах в строке "размещение неограниченного количества доменов". Вообще это замануха: писать о такой возможности - это как указывать очевидное, типа "снег - белый".

С другой стороны, доменные имена любого уровня (кроме первого) необязательно указывают на один и тот же каталог (сайт). Они могут быть связанны с различными сайтами с независимой организацией каталогов. В примере #2 домен "waredom.ru" связан с контентом в каталоге [/home/www/userXXX/somesite], а домен "sub.waredom.ru" связан с контентом в [/home/www/userYYY/anothersite]. И скорее всего эти каталоги не связаны друг с другом по смыслу содержимого.

Более того, крутанский Apache позволяет связывать поддомены с каталогами сайта по маске. Всю схему я не осилил, но можно, например, описать правило, по которому любой подкаталог от корневого будет связан с поддоменом некоторого домена:
waredom.ru - [/home/www/userXXX/site]
sub.waredom.ru - [/home/www/userXXX/site/sub]
my.blogs.waredom.ru - [/home/www/userXXX/site/blogs/my]

Это одна из возможностей Apache для автоматического назначения поддоменов сайтам. Реально расположение каталогов может быть любым, и вероятно тогда его нужно будет описывать вручную.

Infobox.ru нагло зажимает эту возможность и позволяет связывать любые поддомены только с одним сайтом. Т.е. на деле настраивать псевдонимы сайта (ServerAlias). Другие хостеры, например Belihost.ru, заявляют о "неограниченных поддоменах", имея в виду именно назначение любого количества поддоменов одного домена любым каталогам (в пределах, разрешенных на аккаунте).

Маркетинг

Технически "sub.waredom.ru" и "waredom.ru" оба являются доменами, первый - поддомен по отношению ко второму. И без разницы, куда указывают эти имена, оба домена равнозначны по отношению к сайтам. Т.е. они могут вести на разные сайты или подразделы одного сайта; физически контент может быть расположен на разных серверах или в одном дисковом пространстве хостера, и то потому, что ip-адреса доменов приведут запрос на один сервер.

Но хитрые хостеры вносят путаницу в понятия:
"домен второго уровня" - например "waredom.ru" и связанный с ним каталог с контентом (сайт). NS-сервер вернет адрес компа хостера.
"неограничено поддоменов" - домены третьего и ниже уровней, т.е. " *.waredom.ru ". Иерахия соответствующих каталогов вообще не важна. Как я понимаю, контент соответствующих им сайтов будет лежать на том же сервере, где и контент сайта "waredom.ru". И скорее всего, корневые каталоги "подсайтов" будут где-то в корневом каталоге этого сайта.
"Количество сайтов" - сколько доменов второго уровня я могу связать с конечными корневыми каталогами (c разными каталогами). NS-сервер может вернуть разные ip-адреса, т.е. разные машины будут хранить сайты по этим именам. При этом "количество сайтов", связанных с доменами третьего (и выше) уровней я могу делать, сколько хочу (aka "неограничено поддоменов").

Т.е. хостеры накладывают ограничение только на домены второго уровня. Хотя технически домен любого уровня (кроме первого) может указывать на любой сайт. Просто домены третьего уровня и ниже выглядят не так солидно, не ценятся и не приносят денег. И потом, вы не представляете, как трудно подобрать имя для домена второго уровня. А для доменов бОльших уровней - без проблем.

Post Scriptum
Организация каталогов на сайте

В настройках сайта нужно указывать, какой каталог считать корневым. Мне хостер дал доступ в [/home/www/userXXX/site/]. Там я могу организовывать иерахию каталогов, как мне хочется. И в итоге я вполне мог бы сделать так:

[/home/www/userXXX/site/for_all] - зона юзера, корень сайта. Именно с этим каталогом будет связан домен. Выше него через браузер по HTTP-протоколу попасть нельзя.

[/home/www/userXXX/site/admin] - админские скрипты. Сюда обращается веб-сервер при сборке страницы. Любопытный пользователь сюда не заглянет даже зная путь к каталогу.

Кстати, там уже есть некоторые созданные каталоги, существование которых требует хостер:

[/home/www/userXXX/site/logs] - Аpache сюда пишет логи.

[/home/www/userXXX/site/cgi-bin] - здесь должны лежать исполняемые скрипты (php-скрипты тоже), которые нужно запускать непосредственно с интерпретатором.

Зачем отдельный каталог для скриптов? Я понял это так: все мои скрипты используется только веб-сервером при сборке страницы для ответа браузеру. Например при запросе css-файла Apache просто его отправляет, но если он берет php-файл, то подключает для его выполнения php-процессор. Это потому, что в конфигах Apache (в .htaccess) прописано: использовать предобработку php-файлов через соответствующий процессор.

Но при всей своей мощи Apache - это всего лишь веб-сервер, т.е. он занимается только ответами на запросы, приходящие в порт 80 (по умолчанию). А на серверах хостера есть же еще и операционка и куча полезного софта. Этим софтом можно пользоваться, если знать как. Возвращаясь к каталогу "cgi-bin": скорее всего на этот каталог назначены права на исполнение от имени владельца/группы. Речь про права доступа в Linux. Поэтому сюда пишутся скрипты для софта, возможно не принимающего явного участия в сборке html-страницы. Самый очевидный пример работы помимо ответов браузеру - Cron (планировщик Linux). Например, можно накатать скрипт, указать в его первой строке, каким софтом его выполнять и записать в Cron запуск этого скрипта, разместив его в "cgi-bin". Получится скрипт с правами на исполнение, выполняющий некую служебную работу для сайта.

Парковка домена

Теперь понятно, что это, и зачем нужна парковка домена. Допустим, я купил доменное имя, но еще ничего не написал для сайта. По этому имени будет обращение к ns-серверам, которые вернут для него ip-адрес. По адресу придет запрос к хостеру, а там нет ничего %) Тогда хостер может вернуть страницу типа "Сайт по имени не найден" или более красиво "Доменное имя занято, сайт в разработке". Вот зачем парковка. С тем же успехом я мог бы сам сразу связать домен с корневым каталогом будущего сайта, и выложить там индексную страницу с соответствующим сообщением.

Статья выжила после слияния сайтов, подробности здесь. Дата первой редакции: 13 июля 2011

[1oo%, EoF]

Понравилась статья? Расскажите о ней друзьям:


Комментарии
Для работы модуля комментариев включите javaScript


Показать/скрыть правила
Имя
[i] [b] [u] [s] [url]
:-) ;-) :D *lol* 8-) :-* :-| :-( *cry* :o :-? *unsure* *oops* :-x *shocked* *zzz* :P *evil*

Осталось 1000 символов.
Код защиты от спама Обновить код
Каждый комментарий проходит ручную модерацию. 100% фильтрация спама.
Продвижение
Время
Метки