Полезные статьи для пользователей >> Инструкции по работе с хостингом >> Некоторые технические аспекты виртуального хостинга

Виртуальный хостинг

Разберем по этапам понятие «виртуальный хостинг» и технологию его создания (настройки). Он представляет собой методику хранения содержимого Web-сайтов с разными именами доменов или хостов на одном сервере. Например, именам www.mystore.com и www.frankspage.com в DNS может соответствовать один и тот же IP-адрес, и Apache обслуживает оба этих сайта (равно как и собственное имя хоста, которое задано директивой ServerName). Какое программное обеспечение нужно для виртуального хостинга? Для обслуживания всех запросов достаточно одного Apache, что упрощает администрирование и позволяет экономить IP адреса. Однако увеличивается вред при взломе, потому что взломщик получает доступ ко всем сайтам.

Протокол НТТР/1.0 не указывает имя хоста. Поэтому ранее виртуальный хостинг был возможен лишь в том случае, когда каждому имени хоста был поставлен в соответствие отдельный IP-адрес (с последующим созданием IP-псевдонимов, указывающих на одну и ту же Ethernet-карту). Каждый виртуальный хост определялся по IP-адресу, и запрос, приходящий от Web-браузера, всегда получал в ответ страницу соответствующего Web-сайта. Недостатком такого подхода было то, что привязка больших блоков IP-адресов к одной и той же карте становилась громоздкой и приводила и к излишнему потреблению адресного IP-пространства.

С появлением версии протокола НТТР/1.1 данный процесс значительно упростился. Обязательный заголовок Host: указывает искомое имя хоста, поэтому виртуальные хосты, различаемые по имени, стали нормой в современном Internet. Клиенты, не поддерживающие заголовка Host: теперь чрезвычайно редки. Далее обсуждается исключительно новый вариант виртуального хостинга. Если вы заинтересованы в использовании виртуального хостинга на базе IP-адресов, обратитесь к документации, имеющейся на Web-сайте Apache.

Большая часть файла httpd.conf определяет сервер по умолчанию — глобальный набор определений, применяющихся ко всем запросам, получаемым сервером Apache. В сервере по умолчанию директива ServerName используется в первую очередь для конструирования URL-перенаправления с кодом 301. Можно также воспользоваться небольшим набором директив, отменяющим глобальные настройки в том случае, когда заголовок Host: совпадает с определенным именем хоста. Такие наборы правил и представляют собой виртуальные хосты.

Предположим, что сервер называется stripes.somewhere.com. Его имя задано в главной директиве ServerName. Для настройки виртуального хостинга по именам следует воспользоваться директивой NameVirtualHost с аргументом * (этот символ-заместитель означает "все хосты"), за которой следует необходимое число различных блоков :

Пример блока VirtualHost:

NameVirtualHost *
ServerName www.somewhere.com
DocumentRoot /usr/local/www/data
ServerAdmin webmaster@somewhere.com
ErrorLog logs/www.somewhere.com-error_log
CustomLog logs/www.somewhere.com-access_log common
ServerName www.frankspage.com
ServerAlias frankspage.com
DocumentRoot /home/frank/public_html
ServerAdmin frank@frankspage.com
ErrorLog logs/www.frankspage.com-error_log
CustomLog logs/www.frankspage.com-access_log common

Внутри контейнера директива ServerName определяет имя хоста. Директива DocumentRoot указывает, где находится корневой каталог файловой системы для приходящего запроса, a ErrorLog и CustomLog - альтернативные log файлы для каждого виртуального хоста. ServerAlias позволяет перечислить псевдонимы виртуального хоста. В блоке можно включить и любые другие директивы.

Важно отметить, что при настройках, приведенных ранее, запрос к серверу по умолчанию (stripes.somewhere.com) или к любому другому имени хоста, соответствующему IP-адресу сервера, но не совпадающему ни с одним из блоков , обработан не будет.

Пример более корректного блока VirtualHost:

NameVirtualHost *
ServerName stripes.somewhere.com
ServerAlias *.somewhere.com
DocumentRoot /usr/local/www/data
ServerAdmin webmaster@somewhere.com
ErrorLog logs/www.somewhere.com-error_log
CustomLog logs/www.somewhere.com-access_log common

ServerName www.frankspage.com
ServerAlias frankspage.com
DocumentRoot /home/frank/public_html
ServerAdmin frank@ frankspage.com
ErrorLog logs/www.frankspage.com-error_log
CustomLog logs/www.frankspage.com-access_log common

Виртуальные хосты можно создавать множеством способов: указывая различные IP-адреса и порты в блоках . Синтаксис таких методов можно уточнить по адресу http://httpd.apache.org/docs/vhosts/.