Книга: Сетевые средства Linux
Конфигурация виртуальных доменов
Разделы на этой странице:
Конфигурация виртуальных доменов
Существуют два способа организации работы с виртуальными доменами. Один из них состоит в том, что, в зависимости от имени, указанного в запросе, в качестве корневого каталога документов выбираются различные каталоги. Второй способ позволяет устанавливать для каждого виртуального домена разные наборы опций.
Использование VirtualDocumentRoot
VirtualDocumentRoot
— одна из основных директив, используемых для настройки виртуальных доменов. Эта директива позволяет указать имя каталога, которое будет выполнять роль корневого каталога документов при указании в составе запроса определенного имени. В качестве значения VirtualDocumentRoot
указывается имя каталога, которое может содержать различные переменные. (Назначение этих переменных описано в табл. 20.1.)
Таблица 20.1. Переменные, используемые для создания имен каталогов
Переменная | Описание |
---|---|
%% |
Символ % в имени каталога |
%p |
Номер порта, используемый сервером |
%N.M |
Часть имени, отделенная от других частей точками. N — это число, ссылающееся на компонент имени. 0 означает все доменное имя, 1 — первый компонент, 2 — второй компонент и т.д. Значение N также может быть отрицательным: — 1 определяет последний компонент имени, — предпоследний компонент и т.д. M принимает такие же значения, как и N , но ссылается не на компонент имени, а на символ в составе компонента. Если вы хотите использовать весь компонент имени, точку и M можно не указывать. |
Рассмотрим в качестве примера следующую запись:
VirtualDocumentRoot /home/httpd/%0
Она сообщает серверу о том, что он должен использовать подкаталог каталога /home/httpd
, имя которого соответствует полному имени сервера, указанному в составе запроса. Например, если в запросе задан URL http://www.threeroomco.com/index.html
, сервер будет искать файл /home/httpd/www.threeroomco.com/index.html
. Такой способ очень удобен, но если вам необходимо поддерживать большое количество Web-узлов, то придется создавать много подкаталогов с достаточно длинными именами (в данном примере все подкаталоги должны присутствовать в каталоге /home/httpd
). При необходимости вы можете использовать в качестве имени каталога часть доменного имени. Пример подобного подхода иллюстрирует приведенная ниже запись.
VirtualDocumentRoot /home/httpd/%-1/%-2
Если в конфигурационном файле содержится такое выражение, то, получив запрос, в котором указан URL http://www.threeroomco.com/index.html
, Apache вернет клиенту файл /home/httpd/com/threeroomco/index.html
(если он имеется на сервере). Если вы хотите использовать в имени каталога лишь один символ из доменного имени, вам надо включить в состав конфигурационного файла запись наподобие следующей:
VirtualDocumentRoot /home/httpd/%-2.1/%0
Теперь при получении URL http://www.threeroomco.com/index.html
Apache вернет клиенту файл /home/httpd/t/www.threeroomco.com/index.html
. Переменная %-2.1
определяет первый (.1
) символ в составе имени домена (-2
), предшествующего имени домена верхнего уровня.
Независимо от значения директивы VirtualDocumentRoot
, вам надо задать значение Off
для директивы UseCanonicalName
.
UseCanonicalName Off
Если директива UseCanonicalName
будет иметь значение On
, устанавливаемое по умолчанию при инсталляции сервера, Apache будет использовать для обработки относительных ссылок доменное имя компьютера, на котором он выполняется. Например, если в документе index.html
содержится ссылка на Web-страницу products.html
, Apache будет стараться извлечь ее, основываясь на своем каноническом имени. При наличии виртуальных доменов такое поведение недопустимо. Если задать значение Off
директивы UseCanonicalName
, то для обработки относительных ссылок Apache будет применять имя, соответствующее виртуальному домену.
Использование <VirtualHost>
Альтернативный подход к созданию виртуальных доменов предполагает непосредственное описание каждого из них. Для этого в конфигурационном файле Apache предусмотрены две специальные директивы.
• NameVirtualHost
. Данная директива указывается в главном конфигурационном файле Apache и информирует сервер о том, что вы собираетесь использовать виртуальные узлы. В качестве значения этой директивы чаще всего указывается символ *
; при этом необходимо определять виртуальные домены для поддержки всех типов обращения к серверу. Кроме того, значением опции NameVirtualHost
может быть IP-адрес, связанный с сетевым интерфейсом; в этом случае конфигурация основного сервера применяется ко всем запросам, за исключением запросов, переданных через этот интерфейс, и запросов, соответствующих определению виртуального узла.
• <VirtualHost>
. Данная директива указывает на начало блока, содержащего определение виртуального домена. Для этой директивы задаются те же значения, что и для директивы NameVirtualHost
. Признаком окончания блока служит директива </VirtualHost>
. В состав блока включаются директивы, определяющие конфигурацию виртуального домена; здесь вы можете указать многие из тех директив, которые используются для настройки сервера, не поддерживающего виртуальные узлы.
В составе блока, сформированного с помощью <VirtualHost>
, обычно указываются директивы ServerName
(она определяет имя, которому соответствует данный блок) и DocumentRoot
. При необходимости вы также можете настроить другие характеристики сервера, например разрешить выполнение CGI-сценариев. В качестве примера рассмотрим следующий фрагмент конфигурационного файла, который описывает два виртуальных Web-узла:
NameVirtualHost *
<VirtualHost *>
ServerName www.threeroomco.com
DocumentRoot /home/httpd/threeroomco/html
ScriptAlias /cgi-bin/ "/home/httpd/threeroomco/cgi-bin/"
</VirtualHost>
<VirtualHost *>
ServerName www.pangaea.edu
DocumentRoot /home/httpd/pangaea-u/html
</VirtualHost>
Если сервер настроен подобным образом, то при обращении к нему посредством имени www.threeroomco.com
он будет предоставлять клиенту статические файлы, которые находятся в каталоге /home/httpd/threeroomco/html
, или запускать на выполнение сценарии, содержащиеся в каталоге /home/httpd/threeroomco/cgi-bin
. Если же в запросе указано имя www.pangaea.edu
, то статические файлы будут извлекаться из каталога /home/httpd/pangaea-u/html
, а выполнение CGI-сценариев будет запрещено.
В отличие от VirtualDocumentRoot
, использование директивы <VirtualHost>
позволяет настроить каждый виртуальный узел и размещать документы в произвольных позициях файловой системы. С другой стороны, VirtualDocumentRoot
предельно упрощает добавление новых доменов; для этого достаточно создать новый каталог. В большинстве случаев администраторы предпочитают использовать директиву <VirtualHost>
, однако вы можете выбрать любой из этих способов, исходя из особенностей поставленной перед вами задачи.
- Организация виртуальных доменов
- Глава 2 Конфигурация
- Конфигурация
- Выражения в значениях по умолчанию для доменов
- Конфигурация безопасности для базы данных
- Инфраструктурная конфигурация
- Глава 1 Знакомство с технологией виртуальных машин
- Неправильная конфигурация платы
- 7.4. Создание виртуальных Web-серверов
- 10.4. Создание виртуальных серверов
- Конфигурация компонентов
- Конфигурация ядра