Главная » 2013 » Декабрь » 12 » 12.4. Виртуальный HTTP‑сервер
01:58
12.4. Виртуальный HTTP‑сервер

Концепция виртуальных хостов позволяет серверу Apache поддерживать несколько Web‑узлов. Получается, что один Web‑сервер заменяет несколько серверов, и вместо одного узла пользователи видят отдельные Web‑узлы. Это очень удобно, если нужно организовать персональные Web‑узлы пользователей или собственные Web‑узлы подразделений компании, например, develop. mycompany. com.

Сервер Apache можно настроить несколькими способами: чтобы запускался один сервер, который будет прослушивать ВСЕ обращения к виртуальным серверам, или запускать отдельный процесс для каждого виртуального сервера. В первом случае один сервер будет одновременно обслуживать все виртуальные. Если вас интересует такой вариант, нужно настраивать виртуальные сервера с помощью директивы VirtualHost. Настройка отдельных процессов для каждого сервера осуществляется с помощью директивы Listen и BindAddress.

В этом разделе я буду рассматривать именно первый случай. Внутри блока директивы VirtualHost можно использовать любые директивы, кроме ServerType, BindAddress, Listen, NameVirtualHost, ServerRoot, TypesConfig, PidFile, MinRequestPerChild, MaxSpareServers, MinSpareServers, так как некоторые из них относятся к основному HTTP‑серверу (например, ServerType), а некоторые – ко второму варианту настройки виртуальных серверов и здесь неприемлемы. Обязательно должны присутствовать директивы ServerName, DocumentRoot, ServerAdmin и ErrorLog.

В зависимости от версии и от настроек Apache виртуальные узлы могут прописываться или в файле httpd. conf, или в файле vhosts. conf. Виртуальные серверы можно идентифицировать по имени или по IP‑адресу.

12.4.1. Виртуальные серверы с идентификацией по имени

Идентификация по имени имеет существенное преимущество перед идентификацией по IP‑адресу: вы не ограничены количеством адресов, имеющемся у вас в распоряжении. Вы можете использовать любое количество виртуальных серверов, и при этом вам не потребуются дополнительные адреса. Такое возможно благодаря использованию протокола HTTP/1.1. Данный протокол поддерживается всеми современными браузерами.

Поддержка виртуальных хостов обеспечивается директивами VirtualHost и NameVirtualHost. Если ваша система имеет только один IP‑адрес, его нужно указать в директиве VirtualHost. Внутри блока директивы VirtualHost записывается директива ServerName. Эта директива задает доменное имя для создаваемого виртуального сервера. Это обязательно нужно сделать, чтобы избежать поиска службой DNS – вы же не хотите, чтобы при неудачном поиске виртуальный сервер был заблокирован? Все директивы VirtualHost используют один и тот же IP‑адрес, заданный директивой NameVirtualHost. В блоке VirtualHost записываются параметры виртуального сервера, причем они записываются для каждого виртуального сервера отдельно. Пример приведен в листинге 12.9.

Листинг 12.9. Два виртуальных сервера – www 121– и lib

Если ваша система имеет только один IP‑адрес, доступ к основному серверу станет невозможным, то есть вы не сможете использовать его напрямую. Можно основной сервер использовать в качестве виртуального, что я и сделал в листинге 12.9: основной сервер www является виртуальным. При наличии двух IP‑адресов можно один присвоить основному серверу, а другой – виртуальному.

Сервер Apache позволяет использовать несколько доменных имен для доступа к одному серверу, например:

При этом запросы, посланные по IP‑адресам, которые присвоены вашим виртуальным хостам, должны соответствовать одному из указанных доменных имен. Чтобы зафиксировать запросы, не соответствующие ни одному их этих имен, нужно с помощью опции default:* создать виртуальный хост, который будет обслуживать такие запросы: <VirtualHost _default_:*>

Обратите внимание на то, что в рассмотренном примере адреса www. dhsilabs. com и lib. dhsilabs. com должны быть прописаны в DNS.

12.4.2. Виртуальные серверы с идентификацией по IP‑адресу

В директиве VirtualHost в качестве адресов можно использовать доменные имена, но лучше указывать IP‑адрес, причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при разрешении имени. Также потребуется один IP‑адрес для вашего основного сервера. Если же распределить все адреса между виртуальными серверами, то нельзя будет получить доступ к основному серверу.

Листинг 12.10. Идентификация по IP‑адресу

В приведенном примере (см. листинг 12.10) сконфигурированы два виртуальных сервера с идентификацией по IP‑адресу. Один из них использует сам IP‑адрес, а другой – доменное имя, соответствующее IP‑адресу.

При конфигурировании виртуальных серверов можно использовать опцию ExecCGI, которая разрешает выполнение CGI‑скриптов на виртуальном сервере. Ниже приведен пример для почтового Web‑интерфейса (листинг 12.11).

Листинг 12.11. Подключение почтового Web‑интерфейса
Категория: Сервер Apache | Просмотров: 388 | Добавил: spb_serge | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: