Разберем по этапам понятие «виртуальный хостинг» и технологию его создания (настройки). Он представляет собой методику хранения содержимого 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 с аргументом * (этот символ-заместитель означает "все хосты"), за которой следует необходимое число различных блоков
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
Внутри контейнера
Важно отметить, что при настройках, приведенных ранее, запрос к серверу по умолчанию (stripes.somewhere.com) или к любому другому имени хоста, соответствующему IP-адресу сервера, но не совпадающему ни с одним из блоков
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 commonServerName 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-адреса и порты в блоках