Виртуальные хосты Apache

“Виртуальные хосты – хосты, имеющие уникальный адрес
в Интернет, эмулируемые и поддерживаемые сервером”
Древнее языческое заклинание

Итак, Вы установили Apache и получили, таким образом, директорию z:/home/localhost/www для хранения документов и z:/home/localhost/cgi для CGI. Однако в Интернете Вы поддерживаете (или, скорее всего, будете поддерживать) несколько серверов, а Apache создал для Вас только один. Конечно, можно структуру этих нескольких серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов с помощью Apache. В нашем распоряжении есть два вида виртуальных хостов: отдельные для каждого ip-адреса или же использующие один общий ip-адрес (так называемые name-based хосты – хосты, определяемые по имени). В тренировочных целях мы рассмотрим оба варианта, а именно, создадим хост hacker, использующий тот же адрес, что и localhost, а также хост cracker с адресом 127.0.0.2.

Важно!
Конечно, вместо “hacker” и “cracker” Вам нужно будет указать желаемые имена ваших виртуальных хостов. Советуем назвать их так же, как и на Вашем настоящем Web-сервере, но только без суффикса .ru или .com – это может многое упростить при программировании скриптов.

  Как это принято в Unix, каждый сервер будет представлен своим каталогом в директории z:/home с именем, совпадающим с именем сервера (мы уже проделывали нечто подобное с хостом localhost). Например, сервер hacker будет храниться в директории z:/home/hacker, которую Вам необходимо создать прямо сейчас (конечно, вместе с ее поддиректориями cgi и www, как мы делали это ранее), а хост cracker – в директории z:/home/cracker. В этих директориях будут находиться:

  • файлы access.log с журналом доступа к виртуальному серверу;
  • файлы errors.log с журналом ошибок сервера;
  • директория www, где, как обычно, будут храниться html-документы;
  • директория cgi для хранения CGI-программ.

  Для установки виртуальных хостов необходимо сделать некоторые изменения в файле конфигурации Apache httpd.conf (см. выше), а также в некоторых файлах Windows. Вот необходимые действия.

  Откройте файл httpd.conf (можете для этого воспользоваться ярлыком Edit configuration в меню ПускПрограммыApache Web ServerManagement). Перейдите в его конец, Вам предстоит добавить туда несколько строк. Добавьте следующие строки в конце файла после всех комментариев:

NameVirtualHost 127.0.0.1   
#----localhost   
<VirtualHost localhost>   
  ServerAdmin webmaster@localhost   
  ServerName localhost   
  DocumentRoot "z:/home/localhost/www"   
  ScriptAlias /cgi/ "z:/home/localhost/cgi/"   
  ErrorLog z:/home/localhost/error.log   
  CustomLog z:/home/localhost/access.log common   
</VirtualHost>   
#----hacker   
<VirtualHost hacker>   
  ServerAdmin webmaster@hacker.ru   
  ServerName hacker   
  DocumentRoot "z:/home/hacker/www"   
  ScriptAlias /cgi/ "z:/home/hacker/cgi/"   
  ErrorLog z:/home/hacker/error.log   
  CustomLog z:/home/hacker/access.log common   
</VirtualHost>   
#----cracker   
<VirtualHost cracker>   
  ServerAdmin webmaster@cracker.ru   
  ServerName cracker   
  DocumentRoot "z:/home/cracker/www"   
  ScriptAlias /cgi/ "z:/home/cracker/cgi/"   
  ErrorLog z:/home/cracker/error.log   
  CustomLog z:/home/cracker/access.log common   
</VirtualHost>

Важно!
Обратите внимание на то, что мы добавили дополнительно секцию <VirtualHost> для хоста localhost. Если этого не сделать, то все запросы к нему (то есть, по адресу 127.0.0.1) будут обработаны name-based хостом hacker. Происходит это, видимо, из-за того, что хосты в секции <VirtualHost> имеют больший приоритет при обработке, чем главный хост, который мы создали до этого.

  Директива NameVirtualHost говорит серверу, что указанный ip-адрес может использоваться несколькими виртуальными хостами, поэтому для обработки запросов, поступающих на этот адрес, нужно использовать протокол HTTP 1.1 (который, собственно, и поддерживает технику работы с name-based хостами).

При желании можно добавить и другие параметры в блоки <VirtualHost> (например, DirectoryIndex и т.д.) Не переопределенные параметры наследуются виртуальным хостом от главного. Однако не советую злоупотреблять настройками в этих секциях – лучше сделать их в файле .htaccess в директории нужного хоста, потому что компания, которая предоставляет (будет предоставлять) Вам “настоящие” виртуальные хосты в Интернете, вряд ли позволит менять эти блоки.

  Но как же система узнает, что хост cracker сопоставлен с адресом 127.0.0.2, а hacker – вообще name-based хост? Для решения проблемы надо немного подправить системный файл hosts, который находится в директории C:\WINDOWS для операционных систем Windows 95/98/Millenium и C:\WINNT\SYSTEM32\DRIVERS\etc для Windows NT/XP и Windows 2000.

Важно!
Не путайте файл hosts (без расширения) с файлом hosts.sam, который, скорее всего, также расположен в той же директории! Последний файл является просто демонстрационным примером Microsoft и никак не используется системой. Если файла hosts не существует, его необходимо создать.

  Файл hosts – обычный текстовый файл, и в нем может быть заранее записана только одна строка:

127.0.0.1       localhost

  Именно эта строка и задает соответствие имени localhost адресу 127.0.0.1. (Ради справедливости следует сказать, что имя localhost работает и без указанной выше строки. Ну и выдумщики же эти парни из компании Microsoft!) Для нашего виртуального хоста надо добавить соответствующую строчку, чтобы файл выглядел так:

127.0.0.1  localhost hacker   
127.0.0.2  cracker

  Обратите внимание на то, что хост hacker описан на той же строке, что и localhost. Дело в том, что в файле hosts должны указываться только уникальные ip-адреса. Если же одному адресу сопоставляется сразу несколько хостов, то один из них (тот, который идет первым) объявляется главным, а остальные – его синонимами. В нашем случае localhost – главный, а hacker – его синоним. Apache при получении запроса на адрес 127.0.0.1 узнает, что он пришел хосту с именем hacker, и активизирует соответствующий блок <VirtualHost>.

Итак, мы создали виртуальные хосты со следующими свойствами:

  • Хост hacker:
    • имя – hacker;
    • доступен по адресу http://hacker;
    • расположен в директории z:/home/hacker;
    • директория для хранения документов – z:/home/hacker/www, доступная по адресу http://hacker/;
    • директория для CGI – z:/home/hacker/cgi, доступная по адресу http://hacker/cgi/;
    • файлы журналов хранятся в z:/home/hacker.
  • Хост cracker:
    • имя – cracker;
    • доступен по адресу http://cracker или http://127.0.0.2;
    • расположен в директории z:/home/cracker;
    • директория для хранения документов – z:/home/cracker/www, доступная по адресу http://cracker/;
    • директория для CGI – z:/home/cracker/cgi, доступная по адресу http://cracker/cgi/;
    • файлы журналов хранятся в z:/home/cracker.

Важно!
Необходимо заметить, что главный хост (невиртуальный, тот, который мы создали ранее) по-прежнему доступен по адресу http://127.0.0.1 или http://localhost. Более того, его директория /cgi-bin/ “видна” всем созданным виртуальным хостам, так что Вы можете ее использовать.

  После всех изменений не забывайте перезапускать Apache.

Важно!
Просто закрыть окно сервера, нажав на кнопку Закрыть в его правом верхнем углу, недостаточно – нужно воспользоваться ярлыком Stop Apache в меню ПускПрограммыApache Web ServerManagement. В противном случае закроется только окно Apache, а сам сервер останется работать в фоновом режиме, так что изменения, внесенные в httpd.conf, не будут активизированы.

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

Вам надо войти, чтобы написать комментарий.