Инструкция DocumentRoot определяет каталог, в котором хранятся документы веб-сервера. Из соображений безопасности файлы настройки хранятся в другом каталоге. Как мы уже видели, инструкция DocumentRoot в Solaris представлена следующим образом:

DocumentRoot "/var/apache/htdocs"

Чтобы применить инструкции к определенным каталогам, необходимо создать для этих инструкций контейнер (container). Следующие три инструкции httpd.conf применяются для создания контейнеров:

<Directory pathname> - Инструкция Directory создает контейнер для инструкций, относящихся к каталогу pathname. Любая инструкция настройки, следующая за инструкцией Directory и предшествующая следующему оператору </Directorу>, применяется только к указанному каталогу.

<Location document> - Инструкция Location создает контейнер для инструкций, относящихся к конкретному документу (document). Любая инструкция настройки, следующая за инструкцией Location и предшествующая следующему оператору </Location>, применяется только к указанному документу.

<Files filename> - Инструкция Files создает контейнер для инструкций, относящихся к конкретному файлу (filename). Любая инструкция настройки, следующая за инструкцией Files и предшествующая следующему оператору </Files>, применяется только к указанному файлу. Имя файла (filename) может указывать одновременно несколько файлов, если содержит один из специальных символов Unix, * или ?. Кроме того, если за инструкцией Files следует необязательный символ " (тильда), имя файла (filename) интерпретируется как регулярное выражение.

С каталогами и файлами легко разобраться, поскольку это знакомые каждому администратору компоненты файловой системы Unix. Понятие документа характерно уже не для файловой системы, но для веб-сервера. Страница с информацией, отображаемая в ответ на запрос к веб-серверу, является документом: она может состоять из многих файлов, хранящихся в различных каталогах. Контейнер Location позволяет обращаться со сложными документами как с единичными сущностями. Ниже в тексте главы мы рассмотрим примеры использования контейнеров Location и Files. А пока обратимся к контейнерам Directory.

В настройках Solaris определены контейнеры Directory для корневого каталога сервера и каталога DocumentRoot:

<Directory />
 Options FollowSymlinks
 AllowOverride None
 </Directory>
 <Directory "/var/apache/htdocs">
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
 </Directory>

Каждый контейнер Directory начинается с инструкции Directory и заканчивается тегом </Directory>. Каждый из контейнеров содержит операторы настройки, которые относятся только к одному из каталогов. Назначение инструкций в данных контейнерах описано далее в разделе «Безопасность веб-сервера». На данном этапе достаточно понять, что контейнеры в файле httpd.conf применяются с целью ограничения области действия различных инструкций настройки.

Инструкции Alias и ScriptAlias выполняют отображение URL-пути в имя каталога на сервере. Так, файл настройки в Solaris содержит следующие три инструкции:

Alias /icons/ "/var/apache/icons/" 
Alias /manuals/ "/usr/apache/htdocs/manual/" 
ScriptAlias /cgi-bin/ "/var/apache/cgi-bin/"

Первая строка отображает URL-путь /icons/ в каталог /var/apache/icons/. Таким образом, запрос www.wrotethebook.com/icons/ является запросом www.wrotethebook.com/var/apache/icons/. Вторая инструкция отображает URL-путь /manuals/ в www.wrotethebook.com/usr/apache/htdocs/manual/.

Инструкций Alias, устанавливающих подобные отображения, может быть сколько угодно, но инструкция ScriptAlias может быть только одна. ScriptAlias действует точно так же, как инструкция Alias, с той разницей, что конечный каталог содержит исполняемые CGI-программы. Следовательно, httpd разрешает исполнение файлов из данного каталога. Инструкция ScriptAlias особенно важна потому, что позволяет хранить исполняемые веб-сценарии в каталоге вне иерархии DocumentRoot. Сценарии CGI - без преувеличений наиболее уязвимое место вашего сервера; хранение этих сценариев в отдельном каталоге позволяет более жестко разграничивать доступ к ним.

Настройки для Solaris содержат контейнеры каталогов /var/apache/icons и /var/apache/cgi-bin, но не каталога /usr/apache/htdocs/manual. Упоминание каталога в httpd.conf вовсе не требует создания контейнера Directory для этого каталога. Контейнеры /var/apache/icons и /var/apache/cgi-bin выглядят следующим образом:

directory "/var/apache/icons">
 Options Indexes MultiViews
 AllowOverride None
 Order allow,deny
 Allow from all
 </Directory>
 <0irectory "/var/apache/cgi-bin">
 AllowOverride None
 Options None
 Order allow,deny
 Allow from all
 </Directory> 

Контейнеры содержат операторы AllowOverride, Options, Order и Allow, которые относятся к безопасности. Большинство инструкций в контейнерах файлов, документов и каталогов явно или неявно связаны с вопросами безопасности. Все инструкции из приведенных выше контейнеров рассмотрены далее в этой главе в разделе «Безопасность веб-сервера».


Инструкция UserDir позволяет пользователям создавать домашние страницы и указывает на каталог, в котором они хранятся. UserDir, как правило, указывает на каталог public_html, что и можно наблюдать в настройках Solaris. Такие настройки по умолчанию позволяют пользователю создать подкаталог public_html в своем домашнем каталоге и поместить в него домашнюю веб-страницу. Например, если поступает запрос по адресу www.wrotethebook.com/~sara, происходит преобразование в адрес www.wrotethebook.com/ export/home/sara/public_html. Кроме того, инструкция UserDir позволяет указать полное имя - скажем, /export/home/userpages. Администратор системы создает этот каталог и разрешает пользователям сохранять домашние веб-страницы в подкаталогах этого каталога. В последнем случае запрос адреса www.wrotethebook.com/~sara будет преобразован в запрос адреса www.wrotethebook.com/export/home/userpages/sara. Такой подход имеет свои преимущества и недостатки: облегчает наблюдение за содержимым страниц пользователей, однако требует создания и защиты отдельного дерева веб-каталогов, в то время как веб-каталог в домашнем каталоге пользователя автоматически наследует существующие права доступа.

Инструкции PidFile и ScoreBoardFile указывают пути к файлам, определяющим состояния процессов. Параметр PidFile обозначает файл, в котором httpd хранит свой идентификатор процесса, параметр ScoreBoardFile - файл, в который httpd записывает сведения о состоянии процесса.

Параметр Directorylndex определяет имя файла, возвращаемого сервером, если запрос клиента не содержит имени файла. В нашей системе Solaris данный параметр определен следующим образом:

Directorylndex index.html

Исходя из значений параметров DocumentRoot и Directorylndex сервер, получив запрос документа http://www.wrotethebook.com, вернет клиенту файл /var/apache/htdocs/index.html. Получив запрос документа http://www.wrotethebook.com/books/, сервер вернет клиенту файл /var/apache/htdocs/books/index.html. Значение DocumentRoot предваряет все имена файлов, a Directorylndex добавляется к любому запросу, который не заканчивается именем файла.

Ранее в этой главе мы видели из вывода Is для каталога /var/apache/htdocs, что в каталоге существует файл index.html. Что же произойдет в отсутствие такого файла? Что Apache передаст клиенту? Если файл index.html не существует, httpd посылает клиенту список файлов каталога - если это допускается настройками. Передача содержимого каталога разрешена, если инструкция Options в контейнере Directory данного каталога содержит ключевое слово Indexes. (Более подробно рассмотрим Options позже.) Если разрешено получение клиентом индекса каталога, форматированием списка содержимого можно управлять с помощью ряда дополнительных инструкций.