Настройка виртуальных хостов web-cервера Apache

Главная » Статьи » Web технологии » Настройка виртуальных хостов web-cервера Apache

Введение. Виртуальные хосты и их назначение.

После установки web-сервера Apache, доступен всего лишь один хост. Обычно, этого недостаточно — хочется иметь хост для различных тестов, для тестов с новыми версиями ПО (такими, как PHP5, например), для поддержки нескольких проектов одновременно.

Можно, разумеется, установить несколько экземляров web-сервера Apache, но это несколько нерационально. Для поддержки нескольких хостов одновременно используются виртуальные хосты.

Виртуальный хост полностью идентичен по своему назначению главному хосту, за исключением того, что не все директивы настройки главного хоста используются для виртуального (такие настроек мало) и того факта, что виртуальных хостов может быть много.

Виды виртуальных хостов

Различают два вида виртуальных хостов:

Name-based Virtual Hosts

Как видно из названия различаются только по имени хоста.

IP-based Virtual Hosts

Имени хоста может не быть, но необходимо, чтобы хост имел свой ip адрес.

Настройка виртуальных хостов

Рассмотрим настройку именнованных виртуальных хостов.

Например, мы хотит создать два виртуальных хоста, для ip-адреса 127.0.0.1

Если вы настраивали web-сервер Apache, согласно этой инструкции, у вас должен быть настроен один главный хост со следующими параметрами:

ServerAdmin mail@localnet.net
ServerName www.localnet.net

Для удобства (хотя это и не обязательно) исправим эти параметры на следующие:

ServerAdmin admin@localnet
ServerName localnet

Адрес localnet явно дает понять, что хост не расположен в сети интернет.

Настраиваем виртуальные хосты test1 и test2

Для этого редактируем файл p:\usr\local\Apache\conf\httpd.conf:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1> 
  ServerName localnet
  ServerAdmin admin@localnet
</VirtualHost> 

<VirtualHost 127.0.0.1> 
  ServerName test1
  ServerAdmin admin@test1.my
  DocumentRoot /home/test1.ru/www/ 
<Directory /home/test1.ru/www/> 
  Options Includes 
  AllowOverride all 
</Directory> 
  ErrorLog logs/test1.ru.error.log 
  CustomLog logs/test1.ru.log common 
  ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/" 
<Directory /home/test1.ru/cgi-bin/> 
  Options ExecCGI 
  Order allow,deny 
  Allow from all 
</Directory> 
</VirtualHost> 

<VirtualHost 127.0.0.1> 
  ServerName test2
  ServerAdmin admin@test2.my
  DocumentRoot /home/test2.ru/www/ 
<Directory /home/test2.ru/www/> 
  Options Includes 
  AllowOverride all 
</Directory> 
  ErrorLog logs/test2.ru.error.log 
  CustomLog logs/test2.ru.log common 
  ScriptAlias /cgi-bin/ "/home/test2.ru/cgi-bin/" 
<Directory /home/test2.ru/cgi-bin/> 
  Options ExecCGI 
  Order allow,deny 
  Allow from all 
</Directory> 
</VirtualHost>

Обратите внимание, что первым виртуальным хостом идет хост, повторяющий конфигурацию главного хоста. На этот хост пойдут все запросы, для данного ипа, для которых не найдено именнованных хостов. Например, мы хотели создать хост test3, но забыли прописать его в виртуальных хостах. (при условии, что test3 резолвится в 127.0.0.1, см. ниже)

Далее все достаточно просто и логично: настройки полностью идентичны настройками главного хоста.

В названиях хостов придерживаюсь следующей логики — реальный сайт http://test1.ru расположен по пути p:/home/test.1ru/www/, а обращение к его локальной копии идет по адресу http://test1/. Как показала практика, это достаточно удобно.

Не забудье внести домены test1 и test2 в систему DNS (домены должны резолвится в указанный нами адрес, в нашем случае — 127.0.0.1). Либо, если у вас нет DNS-сервера, необходимо добавить в файл x:\%windir%\system32\drivers\etc\hosts (для Windows 2k, где x — имя раздела, на котором установлена windows 2k) следующие строки:

127.0.0.1 test1
127.0.0.1 test2

Либо одну строку:

127.0.0.1 test1 test2

Перед перезапуском Web-сервера Apache, необходимо удостоверится, что все необходимые пути существуют.