Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад] [Содержание] [Дальше]

Практика применения Perl, PHP, Apache, MySQL для активных Web-сайтов

(С) Александр Фролов, Григорий Фролов, 2002

3. Установка и настройка Web-сервера Apache

3. Установка и настройка Web-сервера Apache. 1

Краткая история создания Web-сервера Apache. 3

Установка Web-сервера Apache. 4

Конфигурационные файлы Apache. 7

Расположение и состав конфигурационных файлов. 9

Каталоги документов и программ Web-сервера Apache. 11

Каталоги Apache в RedHat Linux. 11

Каталоги Apache в Microsoft Windows. 11

Проверка работоспособности Web-сервера.. 12

Управление Web-сервером Apache. 13

Запуск сервера Apache. 13

Останов сервера Apache. 14

Перезапуск сервера Apache. 14

Просмотр журналов. 14

Журнал ошибок error.log. 14

Журнал доступа к Web-серверу access.log. 15

Редактирование конфигурационных файлов. 16

Настройка основных параметров сервера Apache. 18

Доменное имя Web-узла. 18

Адрес IP Web-узла. 18

Номер порта TCP/IP.. 19

Расположение каталогов с документами HTML. 19

Расположение каталогов с программами CGI 20

Создание виртуальных Web-узлов.. 21

Использование одного IP для виртуальных Web-узлов. 22

Исходные данные для примера. 22

Создание зон DNS для доменов виртуальных Web-узлов. 23

Настройка файла httpd.conf 23

Адрес IP виртуального Web-узла. 24

Доменное имя виртуального Web-узла. 24

Расположение каталога документов HTML. 24

Адрес E-Mail администратора виртуального Web-узла. 24

Отдельные файлы журналов. 24

Имя главного документа HTML. 25

Виртуальный каталог программ CGI 25

Конфигурирование главного Web-узла. 25

Использование разных IP для виртуальных Web-узлов. 28

Исходные данные для примера. 28

Создание зон DNS для доменов виртуальных Web-узлов. 29

Настройка файла httpd.conf 29

Комбинированный способ. 30

Исходные данные для примера. 30

Создание зон DNS для доменов виртуальных Web-узлов. 31

Настройка файла httpd.conf 31

Использование разных портов IP.. 32

Доменные псевдонимы.. 33

Управление доступом к страницам Web-узла.. 34

Команда <Directory>.. 34

Команда <File>.. 35

Команда <Location>.. 35

Ограничение доступа посетителей Web-узла к каталогу. 35

Ограничение доступа к каталогам программ CGI 36

Файлы .htaccess. 37

Обработка файлов .htaccess. 37

Аргументы команды AllowOverride. 38

Парольный доступ к страницам Web-узла. 39

Базовая аутентификация. 39

Создание файла идентификаторов и паролей. 39

Проверка имени файла управления доступом.. 40

Подключение файла управления доступом.. 40

Подготовка файла управления доступом.. 41

Аутентификация типа Digest 41

Подключение модуля  mod_auth_digest 41

Создание файла идентификаторов и паролей. 42

Подключение файла управления доступом.. 42

Подготовка файла управления доступом.. 42

Другие возможности сервера Apache. 42

Просмотр содержимого каталогов Web-узла. 42

Автоматический выбор национального языка документов. 46

Согласование содержимого по именам документов. 48

Использование команд AddLanguage и AddCharset 49

Настройка браузера посетителя. 50

Использование программы Apache Configuration.. 52

Преимущества и недостатки Apache Configuration. 52

Создание виртуального Web-узла при помощи Apache Configuration. 53

 

В этой главе мы расскажем об установке и базовой настройке одного из наиболее популярных Web-серверов — сервера Apache. Этот бесплатный сервер, который можно загрузить с Web-узла http://www.apache.org, доступен на многих компьютерных платформах, в том числе на платформах Linux, FreeBSD, Sun Solaris, NetWare версии 5.x, OS/2, Microsoft Windows 98/NT/2000 и т.д. Мы, однако, будем рассматривать установку и настройку Apache только в среде Red Hat Linux и Microsoft Windows.

Так как Apache поставляется с исходными текстами, Вы можете самостоятельно их откомпилировать, внеся перед этим необходимые изменения. Однако если Вас устроит стандартный вариант Apache, то с сервера http://www.apache.org (рис. 3.1) можно сразу загрузить двоичные модули, готовые к использованию в среде практически всех основных операционных систем. Сервер Apache входит в состав дистрибутива ОС RedHat Linux версии 7.1, а также других дистрибутивов Linux.

Рис. 3-1. Главная страница Web-узла сервера Apache http://www.apache.org

Краткая история создания Web-сервера Apache

Как мы уже говорили во введении к нашей книге, до появления сервера Apache вначале наибольшей популярностью пользовался Web-сервер CERN HTTPD, созданный в  Европейской лаборатории физики элементарных частиц (Conseil Européen pour la Recherche Nucléaire, CERN).

К началу 1995 года разработка Web-сервера CERN HTTPD была прекращена. Его сменил сервер NCSA HTTPd, разработанный в американском Национальном центре по применению супер-ЭВМ (National Center for Supercomputer Applications, NCSA). Информацию о сервере NCSA HTTPd можно найти по адресу http://hoohoo.ncsa.uiuc.edu.

Через некоторое время и этот проект также был заморожен, однако сервер NCSA HTTPd, поставляющийся вместе с исходными текстами, уже успел приобрести популярность в Интернете. Многие разработчики Web-приложений принимали участие в исправлении ошибок и развитии сервера NCSA HTTPd, работая как индивидуально, так и в составе групп. При этом они контактировали между собой через электронную почту и списки рассылки, обмениваясь файлами изменений, называемых «патчами» (patches).

В результате была образована группа из нескольких разработчиков, выпустившая в апреле 1995 года первую версию сервера Apache с номером 0.6.2. К декабрю 1995 года эта группа выпустила Apache версии 1.0, снабдив его многими новыми модулями и документацией. Менее чем через год Apache обошел по своей популярности сервер NCSA HTTPd.

Возможно, Вам будет интересно происхождение названия сервера Apache. Существует две интерпретации.

Первая интерпретация уходит своими корнями в историю разработки сервера. Так как сервер возник в результате обмена файлами изменений (patches), то он стал называться «A PAtCHy sErver» — «сервер файлов изменений» (или, если хотите, «сервер заплаток»). Вторая интерпретация имеет отношение к воинственному племени индейцев-апачей, отличающихся небывалой выносливостью.

Вы, разумеется, можете выбрать для себя любую интерпретацию, однако факт остается фактом — на сегодня Apache является одним из самых распространенных в Интернете, быстрых, мощных и многофункциональных Web-серверов.

Далее мы рассмотрим процедуру установки и настройки сервера Apache в операционных системах RedHat Linux версии 7.1 и Microsoft Windows 2000.

Установка Web-сервера Apache

Сервер Apache входит во все основные дистрибутивы Linux. Если Вы уже установили RedHat Linux версии 7.1 и не забыли выбрать компонент Web Server (см. раздел «Выбор устанавливаемых компонентов ОС» второй главы), то программные и конфигурационные файлы Apache уже имеются на диске Вашего компьютера.

Самую новую версию дистрибутивных файлов Apache с инструкцией по установке можно найти на Web-узле http://www.apache.org. Чтобы выполнить установку в ОС RedHat Linux, загрузите дистрибутивный файл формата rpm и установите его при помощи следующей команды:

rpm -Uvh apache*

Что же касается операционной системы Microsoft Windows, то для нее Вам придется загружать дистрибутивные файлы Web-сервера Apache и выполнять процедуру установки. Эта процедура достаточно проста и заключается в запуске программы мастера установки.

С главной страницы Web-узла сервера Apache http://www.apache.org, показанной на рис. 3-1, зайдите в раздел Download.  Далее следуя по расположенным в этом разделе ссылкам найдите и загрузите дистрибутивный файл apache_1.3.20-win32-no_src-r2.msi, содержащий только исполнимые модули без исходных текстов. Его размер немного меньше 2 Мбайт, поэтому Вы сможете загрузить этот файл достаточно быстро даже через модем.

Загрузив файл apache_1.3.20-win32-no_src-r2.msi, запустите его на выполнение. После этого на экране появится первое окно мастера установки сервера Apache (рис. 3-2).

Рис. 3-2. Первое окно мастера установки сервера Apache

Щелкните кнопку Next. Далее в следующих двух окнах мастера установки Вам будет предложено ознакомиться с условиями лицензионного соглашения и прочитать самые новые изменения в документации. После того как Вы прочитаете эти документы, щелкните кнопку Next.

Теперь на экране появится окно мастера установки, предназначенное для ввода основной конфигурационной информации Web-сервера (рис. 3-3).

Рис. 3-3. Ввод конфигурационной информации Web-сервера

В поле Network Domain введите доменное имя Вашего сервера. Мы ввели здесь доменное имя zerohops.ru. Если сервер предполагается использовать для создания виртуальных Web-узлов, размещаемых в разных доменах, укажите здесь любое доменное имя из числа имен, используемых на сервере. О настройке виртуальных Web-узлов мы расскажем позже в разделе «Создание виртуальных Web-узлов» этой главе.

В поле Server Name нужно ввести полное доменное имя Web-узла. Как видно из рис. 3-3, мы ввели здесь имя www.zerohops.ru. Опять же, если на компьютере будет работать несколько Web-узлов с разными именами, то пока можно ввести любое имя.

И, наконец, в поле Administrators Email Address введите адрес электронной почты Web-мастера, отвечающего за работоспособность сервера.

Чтобы Web-сервер запускался автоматически после загрузки операционной системы, отметьте флажок Run as a service for All Users. При этом сервер Apache будет работать как сервис операционной системы Microsoft Windows.

Заполнив все поля, щелкните кнопку Next. В следующем окне (рис. 3-4) необходимо будет выбрать тип установки.

Рис. 3-4. Выбор типа установки

Если Вы собираетесь установить все компоненты сервера и документацию, отметьте флажок Complete. Чтобы установить только программные модули сервера и отказаться от установки документации или наоборот, установить только документацию, отметьте флажок Custom. Затем выберите устанавливаемые компоненты (рис. 3-5).

Рис. 3-5. Выбор устанавливаемых компонентов

Щелкнув кнопку Change (рис. 3-5), Вы сможете изменить путь к каталогу для установки сервера. После этого щелкните кнопку Next.

Теперь у Вас будет последняя возможность что-либо изменить в параметрах установки сервера (рис. 3-6). Для выполнения изменений воспользуйтесь кнопкой Back. Чтобы запустить процесс копирования дистрибутивных файлов Apache, щелкните кнопку Install.

Рис. 3-6. Здесь принимается решение о запуске копирования файлов

Процесс копирования файлов отображается в окне мастера установки Apache и может быть прерван щелчком кнопки Cancel (рис. 3-7).

Рис. 3-7. Идет процесс копирования дистрибутивных файлов

Когда все файлы будут скопированы, на экране появится последнее окно мастера установки с сообщением об успешном завершении этого процесса (рис. 3-8). Чтобы завершить работу мастера установки, щелкните кнопку Finish.

Рис. 3-8. Установка завершена

Теперь можно переходить к проверке правильности установки и настройке Web-сервера Apache.

Конфигурационные файлы Apache

Когда в [1] мы рассказывали о конфигурировании Web-сервера Microsoft Internet Information Server (IIS), то упоминали графический модуль конфигурирования Internet Information Services (рис. 3-9).

Рис. 3-9. Консоль Internet Information Services

С помощью этой консоли можно выполнять все необходимые действия с Web-сервером IIS и работающими под его управлением виртуальными Web-узлами.

Что же касается Web-сервера Apache, то обычно его настройка выполняется  редактированием конфигурационных файлов. Тем не менее, в операционной системе RedHat Linux версии 7.1 предусмотрена специальная программа Apache Configuration с графическим интерфейсом (рис. 3-10).

Рис. 3-10. Программа конфигурирования Apache с графическим интерфейсом

Эта программа может оказать Вам помощь при начальном изучении конфигурационных файлов Apache, но она требует установки системы X-Window и графической оболочки KDE.

В нашей книге мы расскажем о выполнении настройки Apache как при помощи ручного редактирования конфигурационных файлов, так и с использованием программы Apache Configuration.

Расположение и состав конфигурационных файлов

Расположение конфигурационных файлов сервера Apache зависит от дистрибутива операционной системы.

Если Вы установили RedHat Linux версии 7.1, то файлы конфигурации Apache находятся в каталоге /etc/httpd/conf. После установки Debian Linux файлы конфигурирования Apache будут записаны в каталог /etc/apache. Что же касается ОС Microsoft Windows, то по умолчанию эти файлы записываются в каталог Program Files\Apache Group\Apache\conf.

Заметим, что состав, назначение и формат конфигурационных файлов Apache одинаковый в версиях для Linux и Microsoft Windows. Там, где есть различия, мы сделаем необходимые замечания.

Первые версии Web-сервера Apache использовали для хранения всех настроек три основных конфигурационных файла — httpd.conf, srm.conf и access.conf. В современных версиях Apache файлы srm.conf и access.conf оставлены для обратной совместимости, но не рекомендуются к использованию. Теперь все основные настройки должны хранится в файле httpd.conf.

Помимо перечисленных выше трех файлов конфигурации используются еще два — mime.types и magic.

Файл mime.types содержит перечисление типов многоцелевых расширений электронной почты Интернета (Multipurpose Internet Mail Extensions, MIME). Этот файл необходим для отправки клиенту Web-сервера правильных типов данных для документов, хранящихся на сервере. Подробное описание типов данных MIME Вы найдете в документах RFC 2045, 2046, 2047, 2048 и 2077.

Что же касается файла magic, то он содержит сигнатуры файлов различных типов и применяется для автоматического определения типов документов по содержимому первых байт файла.

Стандарты RFC

Развитие такого грандиозного проекта, как Интернет, невозможно без стандартизации.

В 1969 году появилась серия документов Request for Comments (RFC), которые содержат сведения о рекомендуемых стандартах и технологиях для применения в Интернете. Их разработчики — любые заинтересованные лица и организации. Однако прежде чем такой документ получает новый номер и добавляется в серию, его обязательно изучают и оценивают специалисты IETF. Хотя документы RFC носят рекомендательный характер и не обязательны для исполнения, разработчики технологий и программ для Интернета обычно следуют им.

По мере создания новым документам RFC присваиваются последовательные номера. Даже новый документ, замещающий существующий, получает новый номер. Таким образом, номера документов RFC повторно не используются.

Документы RFC разделяются по необходимости применения и степени готовности.

С точки зрения необходимости использования документы RFC подразделяются следующим образом:

·       обязательные к применению (Required),

·       рекомендованные (Recommended),

·       факультативные (Elective),

·       ограниченного применения (Limited Use),

·       не рекомендуемые к использованию (Not Recommended). 

По степени готовности различают следующие типы документов RFC:

·       экспериментальные (Experimental),

·       предлагаемые к использованию (Proposed),

·       черновые (Draft),

·       стандартные (Internet Standard).

Кроме того, документы RFC подразделяются на:

·       информационные (Informational),

·       исторические (Historic).

В нашей книге мы будем ссылаться на те или иные документы RFC, указывая их номер. По нему Вы сможете легко найти и загрузить текст соответствующего документа RFC, например, c сервера RFC Editor Site, расположенного в Интернете по адресу http://www.rfc-editor.org.

Как правило, при настройке параметров сервера Apache Вам придется редактировать только один файл httpd.conf. Остальные файлы в большинстве случаев можно оставить в исходном виде.

Перед тем как приступить к редактированию файла httpd.conf, мы настоятельно рекомендуем сделать его резервную копию. Резервное копирование файла httpd.conf позволит Вам легко вернуться к исходной конфигурации сервера Apache, если в этом возникнет необходимость.

Что находится в файле httpd.conf?

Вы можете просмотреть его содержимое, открыв любым текстовым редактором. В файле httpd.conf имеются команды и группы команд, условные операторы а также строки комментариев, начинающиеся с символа #.

Всего конфигурацию сервера Apache, а также работающих под его управлением виртуальных Web-узлов могут определять десятки команд. Искусство настройки Apache заключается в умении выбирать нужные команды и аргументы, достигая необходимого результата. Тем не менее, в простейшем случае для создания работоспособного Web-узла Вам будет достаточно изменить или добавить в файл httpd.conf всего несколько команд.

Команды могут иметь один или несколько аргументов. Например, команда Port с аргументом 80 определяет номер порта TCP/IP, на котором сервер Apache принимает запросы:

Port 80

При помощи команды ServerAdmin указывается адрес электронной почты Web-мастера, отвечающего за работу Web-узла:

ServerAdmin alexandre@frolov.pp.ru

Некоторые команды объединяются в группы. Это, например, команды управления доступом к каталогам и файлам Web-узлов. Ниже в качестве примера мы привели группу команд, ограниченную командами <Directory> и </Directory>:

<Directory "/var/www/cgi-bin">
  AllowOverride None
  Options ExecCGI
  Order allow,deny
  Allow from all
</Directory>

Аргумент команды <Directory> определяет физический путь к каталогу сервера /var/www/cgi-bin. Что же касается команд, расположенных в группе <Directory>, то они задают параметры доступа к указанному каталогу. В данном случае разрешается исполнение программ CGI, хранящихся в каталоге, всем посетителям Web-узла.

Условные операторы выглядят следующим образом:

<IfModule mod_userdir.c>
  UserDir "I:/Program Files/Apache Group/Apache/users/"
</IfModule>

Здесь команда UserDir будет приниматься во внимание только в том случае, если в конфигурацию сервера Apache включен модуль mod_userdir.c.

Если команды длинные, их можно продолжать на следующей строке при помощи символа «\».

Файл httpd.conf обильно снабжен комментариями, объясняющими назначение команд и их аргументов. Строки комментариев начинаются с символа «#».

Далее в оставшейся части этой главы мы будем рассказывать об использовании команд конфигурирования Apache для достижения необходимых нам результатов.

Каталоги документов и программ Web-сервера Apache

Прежде чем мы приступим к редактированию конфигурационного файла httpd.conf, нам нужно найти каталоги документов и программ сервера Apache. Эти каталоги имеют одинаковое назначение в версиях Apache для Linux и Microsoft Windows, но называются по-разному.

Каталоги Apache в RedHat Linux

В операционной системе RedHat Linux версии 7.1 при установке Apache создается три каталога документов и программ Web-сервера.

В первом каталоге /var/www/html хранятся документы HTML Web-узла, используемого Web-сервером по умолчанию. Это так называемый главный Web-узел. Когда мы будем рассказывать про виртуальные Web-узлы, то Вы узнаете, что помимо главного Web-узла в рамках одного Web-сервера можно создать много виртуальных Web-узлов, имеющих такой же или другой адрес IP и разные доменные имена. Если не создавать ни одного виртуального Web-узла, то будут использоваться документы HTML из каталога /var/www/html.

Второй каталог /var/www/cgi-bin используется для хранения расширений сервера Web в виде программ CGI составленных, например, на языке Perl или C. Обычно этот каталог используется для главного Web-узла. Виртуальные Web-узлы могут иметь собственные каталоги для хранения таких расширений.

Что же касается третьего каталога /var/www/icons, то в нем находится небольшая коллекция пиктограмм, которые разрешается бесплатно использовать для оформления страниц Ваших Web-узлов.

Каталоги Apache в Microsoft Windows

После установки Web-сервера Apache для Microsoft Windows Вы сможете найти три каталога, перечисленные в предыдущем разделе, в каталоге Program Files\Apache Group\Apache на системном диске.

Каталог Program Files\Apache Group\Apache\htdocs аналогичен по своему назначению каталогу /var/www/html — в нем находятся документы HTML Web-узла, используемого Web-сервером по умолчанию.

Обращаем Ваше внимание на подкаталог этого каталога с именем manual. В нем Вы найдете полную документацию на Web-сервер Apache (рис. 3-11).

Рис. 3-11. Полная документация для Web-сервера Apache

Каталог Program Files\Apache Group\Apache\cgi-bin предназначен для установки программных расширений CGI для главного Web-узла, используемого по умолчанию. Как мы уже говорили, виртуальные Web-узлы могут иметь собственные каталоги для хранения таких расширений.

Коллекцию пиктограмм Вы найдете в каталоге Program Files\Apache Group\Apache\icons.

Проверка работоспособности Web-сервера

Сразу после установки Web-сервера Apache можно проверить его работу. Для этого запустите на компьютере, где установлен сервер, любой Web-браузер и наберите в строке адреса http://localhost. Если компьютер подключен к локальной сети, можно выполнить проверку аналогичным образом и с другого компьютера, указав браузеру вместо localhost адрес IP сервера Web.

Если установка была выполнена правильно, в окне браузера появится страница, показанная на рис. 3-12.

Рис. 3-12. Проверка установки Apache

Это означает, что сервер Apache был установлен правильно и работает.

Если нужная страница не появляется в окне браузера, нужно проверить, запущен ли сервер Apache. Кроме того, следует обратить внимание на возможные сообщения об ошибках, появляющиеся при запуске сервера и просмотреть файлы журналов. Обо всем этом мы расскажем в следующем разделе этой главы.

Управление Web-сервером Apache

В процессе управления Web-сервером Apache Вам придется запускать, останавливать и перезапускать сервер, а также редактировать конфигурационные файлы и просматривать журналы. Ниже мы расскажем о выполнении этих процедур в операционных системах RedHat Linux и Microsoft Windows.

Запуск сервера Apache

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

В ОС RedHat Linux версии 7.1 запуск сервера Apache можно осуществить в файле /etc/rc.d/rc.local. Запишите в конец этого файла следующую строку:

/etc/rc.d/init.d/httpd start

Это команда запуска сервера Apache. Если она находится в файле /etc/rc.d/rc.local, то сервер Apache будет запускаться автоматически после загрузки ОС. Вы можете запустить сервер и вручную, введя данную указанную выше команду в системном приглашении.

Что же касается Microsoft Windows, то при правильной установке сервис Apache должен запускаться автоматически после загрузки ОС.

В операционной системе Microsoft Windows управление сервером Apache можно выполнять через меню программ (рис. 3-13), вызываемое на экран кнопкой Start.

Рис. 3-13. Управление сервером Apache

Чтобы запустить сервер, выберите из списка Control Apache Server строку Start. После этого на экране появится консольное окно с сообщением о запуске Web-сервера. Если при запуске будут обнаружены ошибки, то Вы увидите в этом окне сообщения об ошибках.

Останов сервера Apache

Чтобы остановить сервер Apache в ОС RedHat Linux версии 7.1, введите в системном приглашении следующую команду:

/etc/rc.d/init.d/httpd stop

Останов работы Apache в ОС Microsoft Windows осуществляется через меню программ, показанное на рис. 3-13. чтобы остановить сервер, выберите из списка Control Apache Server строку Stop. Остановленный таким способом сервер будет снова запущен после перезагрузки ОС.

Перезапуск сервера Apache

Каждый раз при изменении содержимого конфигурационных файлов Apache (например, после создания нового виртуального Web-узла или после изменения параметров существующего Web-узла) необходимо остановить, а затем снова запустить сервер Apache. Только после этого будет использована новая конфигурация.

Для перезапуска сервера Apache в ОС RedHat Linux версии 7.1, введите в системном приглашении следующую команду:

/etc/rc.d/init.d/httpd restart

Перезапуск Apache в ОС Microsoft Windows выполняется с помощью строки Restart списка Control Apache Server (рис. 3-13).

Просмотр журналов

Сервер Apache ведет два журнала, которые могут представлять особый интерес для разработчиков Web-приложений и администратора сервера. Это журнал ошибок, сохраняемый в файле error.log и журнал доступа к серверу, который записывается в файл access.log.

Где найти файлы журналов?

В операционной системе RedHat Linux версии 7.1 эти файлы хранятся в каталоге /etc/httpd/logs. Что же касается ОС Microsoft Windows, то Вы найдете эти файлы в каталоге Program Files\Apache Group\Apache\logs.

Файлы журналов представляют собой обыкновенные текстовые файлы, которые можно просматривать любым текстовым редактором. В Microsoft Windows для этой цели подойдет программа Notepad, а в Linux — программа Midnight Commander.

Журнал ошибок error.log

В журнал ошибок error.log записываются все ошибки, обнаруженные сервером Web при обработке запросов пользователей. Это могут быть ошибки, связанные с неправильной работой активных компонентов Web-приложений, таких как программы CGI, связанные с попыткой запросить с сервера несуществующие документы и другие.

Вот пример сообщений об ошибках в программе CGI, составленной на языке Perl:

 [Fri Aug 24 22:17:43 2001] [error] [client 194.67.XXX.XXX] Premature end of script headers: i:/admin123trudogolik/cgi/city.pl

[Sat Aug 25 08:24:59 2001] [error] [client 194.67.XXX.XXX] Use of uninitialized value in string eq at i:\admin123trudogolik\cgi\city.pl line 30.

 [Sat Aug 25 08:24:59 2001] [error] [client 194.67.XXX.XXX] Use of uninitialized value in concatenation (.) at i:\admin123trudogolik\cgi\city.pl line 80.

 [Sat Aug 25 08:39:49 2001] [error] [client 194.67.XXX.XXX] Undefined subroutine &Trudogolik::getcookie called at trudogolik.pl line 26.

[Sat Aug 25 08:39:49 2001] [error] [client 194.67.XXX.XXX] Database handle destroyed without explicit disconnect.

[Sat Aug 25 10:13:39 2001] [error] [client 194.67.XXX.XXX] Use of uninitialized value in substitution (s///) at (eval 8) line 1.

 [Sat Aug 25 10:26:39 2001] [error] [client 194.67.XXX.XXX] Global symbol "%row" requires explicit package name at i:\admin123trudogolik\cgi\city.pl line 89.

 [Sat Aug 25 17:25:48 2001] [error] [client 194.67.XXX.XXX] "my" variable $mm masks earlier declaration in same statement at i:\admin123trudogolik\cgi\managers.pl line 106.

Здесь, а также в следующих аналогичных примерах этого раздела по соображениям безопасности мы заменили последние цифры адреса IP символами «XXX».

Анализ содержимого журнала errors.log может оказать существенную помощь не только для отладки Web-приложений, но и для борьбы с атаками хакеров. Известно, что многие хакерские атаки основываются на известных «дырах» в защите Web-сервера Microsoft IIS. Вот что мы обнаружили в журнале ошибок на одном из своих серверов:

[Sun Sep 30 16:55:33 2001] [error] [client 194.67.XXX.XXX] File does not exist: i:/admin123trudogolik/root/msadc/root.exe

[Sun Sep 30 16:55:33 2001] [error] [client 194.67.XXX.XXX] File does not exist: i:/admin123trudogolik/root/c/winnt/system32/cmd.exe

[Sun Sep 30 16:55:33 2001] [error] [client 194.67.XXX.XXX] File does not exist: i:/admin123trudogolik/root/d/winnt/system32/cmd.exe

[Sun Sep 30 16:55:33 2001] [error] [client 194.67.XXX.XXX] File does not exist: i:/admin123trudogolik/root/scripts/..%5c/winnt/system32/cmd.exe

Во время атаки, которая продолжалась около часа, пользователь узла с адресом 194.67.XXX.XXX с упорством маньяка пытался получить доступ к программе командного процессора cmd.exe. Попытки были безуспешными, но сервер Apache сумел их зарегистрировать.

Чтобы понять, каким образом взломщик собирался использовать программу cmd.exe, мы воспользовались журналом доступа к Web-серверу access.log.

Журнал доступа к Web-серверу access.log

В процессе нормальной работы в журнал доступа, расположенный в файле access.log, записываются команды протокола HTTP, получаемые сервером от браузеров посетителей и предназначенные для извлечения документов и файлов изображений:

194.67.XXX.XXX - - [20/Aug/2001:20:53:25 +0400] "GET / HTTP/1.1" 200 1619

194.67.XXX.XXX - - [20/Aug/2001:20:53:37 +0400] "GET /apache_pb.gif HTTP/1.1" 304 -

194.67.XXX.XXX - - [20/Aug/2001:20:53:59 +0400] "GET /manual/index.html HTTP/1.1" 200 5742

194.67.XXX.XXX - - [20/Aug/2001:20:53:59 +0400] "GET /manual/images/apache_header.gif HTTP/1.1" 200 4084

194.67.XXX.XXX - - [20/Aug/2001:20:53:59 +0400] "GET /manual/images/pixel.gif HTTP/1.1" 200 61

Анализируя записи журнала доступа во время описанной выше атаки, мы увидели команды, выдаваемые незадачливым «хакером»:

194.67.XXX.XXX - - [30/Sep/2001:16:55:33 +0400] "GET /scripts/root.exe?/c+dir HTTP/1.0" 404 285

194.67.XXX.XXX - - [30/Sep/2001:16:55:33 +0400] "GET /MSADC/root.exe?/c+dir HTTP/1.0" 404 283

194.67.XXX.XXX - - [30/Sep/2001:16:55:33 +0400] "GET /c/winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 293

194.67.XXX.XXX - - [30/Sep/2001:16:55:33 +0400] "GET /d/winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 293

Анализ этих и некоторых других команд, не показанных в этом листинге, позволил нам сделать вывод о том, что предпринимались попытки просмотра содержимого корневых каталогов дисков сервера при помощи команды dir. Средства защиты от подобной атаки — установка необходимых обновлений ОС Microsoft Windows и настройка прав доступа к программе cmd32.exe (у обычного пользователя не должно быть никакого доступа к этому файлу).

Редактирование конфигурационных файлов

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

После внесения изменений необходимо перезапустить сервер Apache. О том, как это сделать, мы рассказали выше в разделе «Перезапуск сервера Apache».

Но что нужно редактировать и для чего?

В подавляющем большинстве случаев редактировать нужно единственный файл — httpd.conf. Обычно это приходится делать, чтобы изменить параметры Web-узла, созданного по умолчанию, чтобы создать виртуальные Web-узлы и настроить их параметры.

Для удаленного редактирования файла httpd.conf в среде ОС Linux удобно использовать встроенный редактор менеджера файлов Midnight Commander, запустив его в окне программы PuTTY (рис. 3-14). Мы рассказывали о программах Midnight Commander и PuTTY в разделе «Удаленное администрирование Linux» главы 2.

Рис. 3-14. Удаленное редактирование файла httpd.conf

Что же касается редактирования файла httpd.conf в среде Microsoft Windows, то это можно сделать, например, при помощи программы Notepad. Для этого выберите строку Edit the Apache httpd.conf Configuration File из меню Configure Apache Server (рис. 3-15) или используйте любой другой известный Вам способ редактирования файла.

Рис. 3-15. Загрузка файла httpd.conf для редактирования в Microsoft Windows

После того как Вы отредактировали содержимое файла httpd.conf, необходимо выполнить проверку ошибок.

Настраивая Apache для ОС Microsoft Windows это можно сделать, выбрав строку Test Configuration из меню Configure Apache Server (рис. 3-15). Если ошибок нет, Вы увидите в окне проверки сообщение «Syntax OK». В противном случае Вы увидите детальное описание обнаруженной ошибки.

Что же касается Apache для RedHat Linux, то проверка конфигурации выполняется путем прослеживания сообщений, возникающих при запуске сервера. В других дистрибутивах Linux Вы можете воспользоваться также следующей командой, введенной в системном приглашении:

/usr/local/apache/bin/apachectl configtest

Если в файле конфигурации нет ошибок, на консоль будет выведено сообщение «Syntax OK». Иначе там появится описание ошибки.

Настройка основных параметров сервера Apache

Как мы уже говорили, все основные параметры сервера Apache хранятся в файле httpd.conf в виде команд (директив). Каждая команда может иметь один или несколько аргументов. Примеры таких команд мы приводили выше в разделе «Расположение и состав конфигурационных файлов» этой главы. Другие команды можно увидеть на рис. 3.14.

Хотя команд в файле httpd.conf  довольно много, большинство из них редактировать не придется, так как указанные по умолчанию аргументы вполне пригодны для работы. Ряд команд не используется и отключено символом комментария «#».

В этом разделе мы рассмотрим только те команды, которые необходимо редактировать для создания главного (не виртуального) Web-узла. Их немного, всего несколько штук. Поэтому на изучение основных команд Вы не потратите много времени.

Процедура редактирования параметров, необходимых для создания виртуальных Web-узлов, тоже достаточно проста. Она будет описана позже в разделе «Создание виртуальных Web-узлов» этой главы.

Настраивая Web-узел (главный или виртуальный), Вам нужно определить как минимум следующие параметры:

·         доменное имя Web-узла, по которому к нему будут обращаться посетители (такое как www.zerohops.ru, www.frolov.pp.ru, www.datarecovery.ru и т.п.);

·         адрес IP, с которым будет связано доменное имя Web-узла при настройке зоны на серверах DNS;

·         номер порта протокола TCP/IP для обращения к Web-узлу;

·         расположение каталогов с документами HTML;

·         расположение каталогов с программами CGI расширений сервера Web

Доменное имя Web-узла

Если Вы устанавливаете Apache в среде Microsoft Windows, то доменное имя главного Web-узла запрашивается мастером установки (рис. 3-3). Об этом мы рассказывали в разделе «Установка Web-сервера Apache» этой главы.

Что же касается Linux, то если Вы устанавливаете Apache вместе с операционной системой, то доменное имя определяется на этапе установки на основе доменного имени узла (рис. 2-11). Об этом мы рассказывали в разделе «Настройка параметров TCP/IP» главы 2.

Для того чтобы задать серверу Apache доменное имя главного узла, необходимо отредактировать команду ServerName:

ServerName www.datarecovery.ru

В качестве единственного аргумента этой команде передается доменное имя главного узла.

Здесь и далее в наших примерах мы будем использовать доменные имена datarecovery.ru, zerohops.ru, trudogolik.ru, frolov.pp.ru и некоторые другие. Создавая собственные Web-узлы, Вам придется зарегистрировать свои доменные имена. Эта процедура была описана нами в [1].

Адрес IP Web-узла

Главный Web-узел имеет тот же самый адрес IP, что и компьютер, на котором установлен сервер Apache. Данный адрес задается при настройке сетевых протоколов операционной системы, поэтому никакой дополнительной настройки конфигурационных файлов Apache не требуется.

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

Если Вы желаете установить на одном компьютере несколько Web-узлов с разными адресами IP, то нужно создавать виртуальные узлы. Об этом мы расскажем позже в разделе «Создание виртуальных Web-узлов» этой главы.

Номер порта TCP/IP

По умолчанию Web-сервер «общается» с браузерами посетителей с использованием протокола TCP/IP через порт с номером 80.

Такое поведение задается командой Port:

Port 80

При необходимости Вы можете изменить номер порта. Например, часто используется порт 8080. При этом обращение из бразуера к Web-узлу, например, с доменным именем www.datarecovery.ru, нужно делать так: http://www.datarecovery.ru:8080/.

Чтобы сервер Apache принимал команды на нескольких разных портах TCP/IP, помимо команды Port следует также использовать команду Listen:

Listen 80
Listen 8080

Для чего может потребоваться изменение номера порта?

Нестандартные номера портов часто используются для отладки или для предоставления какого-либо дополнительного сервиса. Например, страницы Web-узла, работающего на порту 80, могут быть представлены в кодировке Microsoft Windows, а работающего на порту 8080 — в кодировке КОИ-8, принятой в Linux и всех Unix-подобных операционных системах. Нестандартные номера портов могут применяться также для предоставления управляющего или нестандартного сервиса.

Если Вы только приступили к изучению сервера Apache, пока нет никакой необходимости менять аргумент команды Port или использовать команду Listen. Однако при создании виртуальных Web-узлов обе эти команды могут оказаться полезными.

Расположение каталогов с документами HTML

Расположение каталога с документами HTML главного Web-узла определяется командой DocumentRoot и задается при установке сервера Apache.

В операционной системе Microsoft Windows по умолчанию эта команда имеет следующий вид:

DocumentRoot "I:/Program Files/Apache Group/Apache/htdocs"

Как видите, все документы HTML находятся на том же диске, где установлены программные файлы сервера Apache.

В ОС RedHat Linux версии 7.1 сразу после установки Apache аргумент команды DocumentRoot определен так:

DocumentRoot /var/www/html

Если по каким-то причинам Вам нужно перенести документы главного Web-узла в другой каталог или на другой диск, следует отредактировать аргумент команды DocumentRoot и после этого перезапустить сервер Apache. Перед редактированием файла httpd.conf не забудьте сделать его резервную копию.

Обычно в файле конфигурации Apache httpd.conf задается не только расположение для каталога с документами HTML, но и параметры управления доступом к этому каталогу. Параметры указываются с помощью специальных команд следующим образом:

<Directory "I:/Program Files/Apache Group/Apache/htdocs">
 Options Indexes FollowSymLinks MultiViews
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

Они определяют доступ к файлам главного Web-узла. Подробно об этом мы расскажем в разделе «Команды управления доступом» этой главы.

Изменив расположение каталога документов HTML главного Web-узла, Вам также необходимо изменить путь к каталогу в команде <Directory>,  например, так (для Microsoft Windows):

DocumentRoot "I:/apache_default/root"
<Directory "I:/apache_default/root ">
 Options Indexes FollowSymLinks MultiViews
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

Обратите внимание, что при редактировании файла httpd.conf для Apache, работающего в среде Microsoft Windows, в качестве символа разделения каталогов необходимо использовать прямой слеш «/», а не обратный «\». Символ «/» применяется для разделения компонентов пути к файлам в операционной системе Unix и ее разновидностях.

Расположение каталогов с программами CGI

Хотя о программных расширениях Web-сервера мы будем рассказывать в 4 и 5 главах нашей книги, сделаем небольшие замечания о расположении программных файлов таких расширений.

По умолчанию в RedHat Linux версии 7.1 при установке сервера Apache для программ CGI главного Web-узла создается каталог /var/www/cgi-bin. В операционной системе Microsoft Windows для этой цели создается каталог Program Files/Apache Group/Apache/cgi-bin.

Для усиления защиты Web-сервера от атак хакеров доступ обычных пользователей к каталогу программ CGI ограничивается. Для этих каталогов создаются псевдонимы (aliases), или виртуальные каталоги.

Чтобы создать виртуальный каталог, в файле httpd.conf определяется команда ScriptAlias. Вот как она выглядит в Apache для RedHat Linux:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

В Apache для Microsoft Windows данная команда определена аналогично:

ScriptAlias /cgi-bin/ "I:/Program Files/Apache Group/Apache/cgi-bin/"

Первый аргумент команды ScriptAlias определяет имя виртуального каталога, а второй — полный путь к физическому каталогу. Например, если для Web-узла http://www.datarecovery.ru был определен виртуальный каталог cgi-bin, отображаемый на физический каталог  /var/www/cgi-bin/, то правильный адрес URL каталога программ CGI будет http://www.datarecovery.ru/cgi-bin.

Рядом с командой ScriptAlias в файле httpd.conf обычно находится команда <Directory>, определяющая права доступа посетителей к каталогу программ CGI. Вот как эта команда записывается в в Apache для RedHat Linux:

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Аналогично, в Apache для Microsoft Windows:

<Directory "I:/Program Files/Apache Group/Apache/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>

При необходимости Вы можете изменить физическое расположение каталога, отредактировав строку пути в командах ScriptAlias и <Directory>. Кроме того, можно изменить имя виртуального каталога cgi-bin, отредактировав первый аргумент команды ScriptAlias.

Сейчас мы не будем углубляться в детали, оставив их до раздела «Команды управления доступом» этой главы. Заметим только, что в Apache для Microsoft Windows команды определения виртуального каталога CGI располагаются между командами <IfModule> и </IfModule>:

<IfModule mod_alias.c>
. . .
ScriptAlias /cgi-bin/ "I:/Program Files/Apache Group/Apache/cgi-bin/"

<Directory "I:/Program Files/Apache Group/Apache/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>
. . .
</IfModule>

При запуске Apache тело команды <IfModule> (в нашем случае это команды ScriptAlias и <Directory>) принимается во внимание только в том случае, если в конфигурацию Web-сервера был включен модуль, указанный в качестве аргумента команды <IfModule>. В данном случае это модуль mod_alias.c, отвечающий за управление виртуальными каталогами.

Что же касается команды </IfModule>, то она является завершающей для предыдущей команды <IfModule>.

Создание виртуальных Web-узлов

Как правило, на одном физическом компьютере, подключенном к Интернету или локальной интрасети, располагается не один, а несколько Web-узлов. Такие Web-узлы, совместно использующие ресурсы одного компьютера, называются виртуальными Web-узлами (virtual Web sites).

Помимо таких ресурсов, как центральный процессор, оперативная и дисковая память, виртуальные узлы могут совместно использовать и сетевые интерфейсы, т. е. адреса IP. Последнее обстоятельство имеет особое значение, так как количество доступных адресов IP обычно ограничено. Часто провайдер выделяет для Вашего сервера только один или несколько таких адресов.

Сервер Microsoft IIS, описанный нами в [1], позволяет создавать много виртуальных Web-узлов при наличии одного или нескольких доступных адресов IP. На рис. 3-16 мы показали конфигурацию реального сервера Интернета, имеющего только два адреса IP. Как видите, этот сервер обслуживает более дюжины виртуальных Web-узлов с разными доменными именами, и это далеко не предел.

Рис. 3-16. Виртуальные Web-узлы в Microsoft IIS

Современные версии Web-сервера Apache, реализующие протокол HTTP версии 1.1, помимо главного Web-узла, допускают размещение нескольких дополнительных Web-узлов с разными доменными именами на одном или нескольких адресах IP.

Для каждого виртуального Web-узла необходимо подготовить отдельные каталоги документов HTML и программ CGI. В зависимости от того, какое доменное имя передается браузером посетителя, Web-сервер будет отправлять ему документы из соответствующего каталога.

Существует два способа создания виртуальных Web-узлов на сервере Apache. Первый из них предполагает использование отдельных адресов IP для каждого виртуального Web-узла. Такие Web-узлы называются виртуальными Web-узлами, основанными на адресах IP (IP-based virtual Web sites).

Второй способ допускает совместное использование одного адреса IP несколькими виртуальными Web-узлами, называемыми в этом случае виртуальными Web-узлами, основанными на доменных именах (Name-based virtual Web sites).

Оба способа можно комбинировать. Кроме того, допускается назначение для одного и того же виртуального Web-узла различных доменных имен.

Использование одного IP для виртуальных Web-узлов

Как мы только что говорили, количество адресов IP, выделенных провайдером для Вашего сервера, обычно ограничено. Поэтому для размещения нескольких виртуальных Web-узлов на одном компьютере необходимо организовать совместное использование имеющихся в Вашем распоряжении адресов IP.

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

Исходные данные для примера

Вот исходные данные для нашего примера:

·         компьютер имеет один адрес IP 154.100.100.30;

·         на этом компьютере нужно создать три виртуальных Web-узла с доменными именами www.zerohops.ru, www.trudogolik.ru и test.trudogolik.ru;

·         для Web-узлов www.trudogolik.ru и test.trudogolik.ru необходимо предусмотреть отдельные каталоги CGI-программ

Создание зон DNS для доменов виртуальных Web-узлов

Если Вы собираетесь провести эксперимент в своей локальной сети или на своей рабочей станции, то для использования наших конфигурационных файлов необходимо создать для доменов две зоны zerohops.ru и trudogolik.ru на Вашем локальном сервере DNS. Подробнее о настройке зон и серверов DNS читайте в [1].

Зона домена zerohops.ru должна содержать запись типа A для узла www.zerohops.ru следующего вида:

www  A 154.100.100.30

В зоне домена trudogolik.ru необходимо создать две такие записи для узлов www.trudogolik.ru и test.trudogolik.ru:

www  A 154.100.100.30
test A 154.100.100.30

Таким образом, когда посетитель укажет в браузере адрес URL любого из наших Web-узлов, система DNS направит браузер на сервер с адресом IP 154.100.100.30. Получив запрос от браузера, сервер Apache должен распознать доменное имя виртуального Web-узла и отправить посетителю документ из соответствующего каталога Web-сервера.

Настройка файла httpd.conf

Чтобы сервер Apache мог использовать адрес 154.100.100.30 для виртуальных Web-узлов, добавьте в файл httpd.conf следующую команду:

NameVirtualHost 154.100.100.30

Далее для каждого виртуального Web-узла необходимо добавить в конфигурационный файл httpd.conf пары команд <VirtualHost> и </VirtualHost>:

<VirtualHost 154.100.100.30>
  ServerName www.zerohops.ru
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.zerohops.ru/root/"
  ErrorLog logs/www.zerohops.ru-error_log
  CustomLog logs/www.zerohops.ru-access_log common
</VirtualHost>

<VirtualHost 154.100.100.30>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru

  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
  </Directory>

  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.30>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.trudogolik.ru/root/"
  ServerName www.trudogolik.ru

  <Directory "e:/!www.trudogolik.ru/cgi/">
    AllowOverride None
  </Directory>

  ScriptAlias /cgiprg/ "e:/!www.trudogolik.ru/cgi/"
</VirtualHost>

Рассмотрим эти команды подробнее.

Адрес IP виртуального Web-узла

В качестве аргумента всем трем командам <VirtualHost> мы передаем адрес 154.100.100.30, так как все наши виртуальные Web-узлы будут использовать именно этот адрес.

Доменное имя виртуального Web-узла

В командах описания виртуальных Web-узлов, располагающихся между командами <VirtualHost> и </VirtualHost>, мы определяем индивидуальные параметры этих узлов.

Необязательно определять все возможные параметры, можно ограничиться только самыми необходимыми. В любом случае необходимо указать доменное имя виртуального Web-узла и расположение каталогов с документами HTML.

Доменное имя виртуального Web-узла определяет команда ServerName:

ServerName www.zerohops.ru

В каждом из трех описаний, приведенных Выше, используются свои доменные имена.

Расположение каталога документов HTML

С помощью команды DocumentRoot необходимо указать полный путь к физическому каталогу документов HTML.

Если Вы настраиваете сервер Apache для Microsoft Windows, аргумент команды DocumentRoot указывается следующим образом:

DocumentRoot "e:/!www.zerohops.ru/root/"

Здесь мы указали полный путь к физическому каталогу e:/!www.zerohops.ru/root/.

Ниже мы привели аналогичный пример для сервера Apache, работающего в среде операционной системы Linux:

DocumentRoot /var/web_projects/www_trudogolik/root/

Так же как и доменное имя, каждый виртуальный Web-узел обычно имеет свой собственный физический каталог документов HTML, хотя это и не обязательно.

Адрес E-Mail администратора виртуального Web-узла

Во время установки сервера Apache для Microsoft Windows, описанной в разделе «Установка Web-сервера Apache» этой главы, мы указывали адрес электронной почты E-Mail администратора главного Web-узла, используемого по умолчанию (рис. 3-3). В файле конфигурации сервера Apache, работающего под управлением Linux, этот адрес нужно указывать явным образом:

ServerAdmin alexandre@frolov.pp.ru

Определяя параметры виртуальных Web-узлов, Вы можете указывать для каждого такого узла отдельный адрес электронной почты. Это имеет смысл делать в том случае, если каждый виртуальный Web-узел управляется своим администратором. В нашем примере указаны одинаковые адреса E-Mail.

Отдельные файлы журналов

Для упрощения прослеживания событий, имеющих отношение к виртуальным Web-узлам, можно вести для каждого такого узла отдельные журналы.

Расположение журнала ошибок и журнала доступа определяется, соответственно, командами ErrorLog и CustomLog:

ErrorLog logs/www.zerohops.ru-error_log
CustomLog logs/www.zerohops.ru-access_log common

В качестве аргумента этим командам необходимо указать имя файла для сохранения записей журнала. В нашем примере отдельные файлы журналов используются только для Web-узла http://www.zerohops.ru. остальные виртуальные узлы используют общие файлы журналов.

Во время отладки Web-приложения виртуального узла иногда имеет смысл использовать режим углубленного протоколирования событий. Для этого в описание виртуального узла следует включить команду LogLevel с параметром debug:

LogLevel debug

Имя главного документа HTML

Если посетитель указывает браузеру вместо полного адреса URL только доменное имя сервера или путь к каталогу, по умолчанию Web-сервер ищет в каталоге и отправляет посетителю так называемый главный документ HTML. В соответствии с настройкой Web-сервера этот документ должен называться определенным образом, например, index.html, default.htm, index.asp, index.php и т.д.

Имя главного документа, загружаемого по умолчанию, определяется командой DirectoryIndex:

DirectoryIndex index.php index.html index.htm index.shtml

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

Можно настроить Web-узел так, чтобы в описанной выше ситуации вместо главного документа в окне браузера появлялся список имен файлов, расположенных в каталоге. Однако по соображениям безопасности этого делать не рекомендуется.

Виртуальный каталог программ CGI

Каждый виртуальный Web-узел может (и должен!) иметь свой собственный каталог программ CGI. С помощью команды ScriptAlias нужно определить псевдоним физического каталога программ CGI, называемый также виртуальным каталогом программ CGI:

ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"

Здесь создается виртуальный каталог программ CGI с именем cgiprg для физического каталога e:/Admin123Trudogolik/cgi/.

Кроме того, для каталога программ CGI нужно определить права с помощью команд <Directory> и </Directory>, как это показано ниже:

<Directory "e:/Admin123Trudogolik/cgi/">
  AllowOverride None
</Directory>

Только что мы привели пример для сервера Apache, работающего в ОС Microsoft Windows. Описание каталога программ CGI для сервера Apache, установленного в Linux, выглядит немного по-другому:

ScriptAlias /cgiprg/ "/var/web_projects/www_trudogolik/cgiprg/"

<Directory "/var/web_projects/www_trudogolik/cgiprg/">
  Options ExecCGI
  AllowOverride none
</Directory>

Здесь дополнительно используется команда Options с аргументом ExecCGI, разрешающая запуск программ CGI из данного каталога.

Подробнее о программах CGI и настройке соответствующих параметров сервера Apache  мы расскажем в 5 главе этой книги с названием «Создание программ CGI на языке Perl». Что же касается команды <Directory>, то о ней Вы узнаете из раздела «Команды управления доступом» этой главы.

Конфигурирование главного Web-узла

Теперь, когда Вы научились конфигурировать виртуальные Web-узлы, вспомним, что у нас еще есть главный Web-узел. Его главная страница появится в окне браузера в ответ на ввод адреса URL http://localhost.

Обычно создавая виртуальные Web-узлы, разработчики Web-приложений или переопределяют главный Web-узел.

Представим себе такую ситуацию.

Пусть мы устанавливаем отладочный Web-сервер в локальной сети Web-студии. На этом сервере мы отлаживаем четыре проекта: виртуальные Web-узлы с доменными именами www.zerohops.ru, www.datarecovery.ru, www.trudogolik.ru и test.trudogolik.ru. Соответственно, на локальном сервере DNS студии мы создали для этих узлов четыре зоны с записями типа A, указывающими на адрес 154.100.100.30.

Кроме того, нам хотелось бы создать пятый виртуальный Web-узел, страницы которого появлялись бы в окне браузера посетителей при попытке получить доступ к серверу прямым указанием адреса IP, например, так: http://154.100.100.30.

Нам также хотелось бы, чтобы при обращении посетителей по всем другим доменным именам, отображаемым на адрес 154.100.100.30, но не входящим в перечисленный выше список, в дело также включался бы этот пятый виртуальный Web-узел.

На главное странице этого узла можно было бы, например, разместить информацию о компании и созданных ей проектах (рис. 3-17).

Рис. 3-17. Главный Web-узел нашей Web-студии

Все это можно получить, если использовать команды конфигурирования сервера Apache, представленные ниже:

NameVirtualHost 154.100.100.30

<VirtualHost 154.100.100.30>
    ServerName _default_
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/webdefault/root"
    DirectoryIndex index.html
</VirtualHost>

<VirtualHost 154.100.100.30>
    ServerName www.zerohops.ru
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/!www.zerohops.ru/root/"
    ErrorLog logs/www.zerohops.ru-error_log
    CustomLog logs/www.zerohops.ru-access_log common
</VirtualHost>

<VirtualHost 154.100.100.30>
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/Admin123Trudogolik/root/"
    ServerName test.trudogolik.ru
    <Directory "e:/Admin123Trudogolik/cgi/">
        AllowOverride None
    </Directory>
    ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.30>
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/!www.trudogolik.ru/root/"
    ServerName www.trudogolik.ru
    <Directory "e:/!www.trudogolik.ru/cgi/">
        AllowOverride None
    </Directory>
    ScriptAlias /cgiprg/ "e:/!www.trudogolik.ru/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.30>
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/DataRecovery/"
    ServerName www.datarecovery.ru
    <Directory "e:/DataRecovery/scripts/">
        AllowOverride None
    </Directory>
    ScriptAlias /scripts/ "e:/DataRecovery/scripts/"
</VirtualHost>

Как видите, этот набор команд напоминает тот, что был описан выше в разделе «Настройка файла httpd.conf». Но есть и отличия. Помимо добавления нового виртуального Web-узла с доменным именем www.datarecovery.ru, мы создали еще один такой узел, указав для него имя _default_, тот же адрес IP и отдельный каталог документов HTML:

<VirtualHost 154.100.100.30>
    ServerName _default_
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/webdefault/root"
    DirectoryIndex index.html
</VirtualHost>

Описанный таким образом виртуальный Web-узел будет включаться в работу в том случае, если от браузера пришел запрос, не содержащий ни одного из перечисленных в описаниях виртуальных узлов доменного имени. Например, Вы создали зону someserver.net и определили в ней узел www с адресом 154.100.100.30, но виртуальный Web-узел с таким доменным именем еще не был создан на сервере Web-студии.

Перенаправление нераспознанных запросов на пятый Web-узел будет работать, однако, при условии, что определение узла с именем _default_ находится впереди определений остальных виртуальных узлов. Если же Вы поставите на его место определение, например, узла www.datarecovery.ru, то Web-узел www.datarecovery.ru будет откликаться в ответ на запрос посетителя с адресом http://154.100.100.30 или www.someserver.net (данный адрес выдуман нами только в качестве примера).

Что поместить в каталог, заданный командой DocumentRoot сервера с именем _default_?

Это зависит от назначения сервера. Вы можете поместить в него, например, страницу ссылок на Web-узлы, как это показано на рис. 3-17. Соответствующий этому рисунку документ HTML представлен в листинге 3-1.

Листинг 3-1 Вы найдете в файле chap3\WebDefault\index.html на прилагаемом к книге компакт-диске.

<html>
<head></head>
<body>
<h1>Web-студия службы ZeroHops.Ru</h1>
<p>Вы попали на главный сервер Web-студии
службы ZeroHops.Ru.</p>
<p>Ознакомьтесь с нашими проектами:</p>
<ul>
  <li><a href="http://www.zerohops.ru">ZeroHops.Ru</a> -- размещение
    физических и виртуальных Web-серверов в Интернете;</li>
  <li><a href="http://www.datarecovery.ru">DataRecovery.Ru</a> -- служба
    востановления данных;</li>
  <li><a href="http://www.trudogolik.ru">Trudogolik.Ru</a> --
    виртуальное кадровое агентство Трудоголик.Ру;</li>
  <li><a href="http://test.trudogolik.ru">test.Trudigilik.Ru</a> --
    администрирование Web-узла агентства Трудоголик.Ру</li>
</ul>
</body>
</html>

Заметим, что при обращении к Web-серверу по адресу http://localhost в окне браузера, запущенного на сервере, по-прежнему будет появляться страница главного Web-узла. Сразу после установки Apache она имеет вид, показанный на рис. 3-12.

Файл конфигурации Apache (для Microsoft Windows) представлен в листинге 3-2.

Листинг 3-2 Вы найдете в файле chap3\NameBased\httpd.conf на прилагаемом к книге компакт-диске.

Настраивая файлы конфигураций для Apache, работающем в среде Linux, используйте другой способ указания пути к каталогам (в соответствии с соглашениями, принятыми в этой ОС), например:

<VirtualHost 192.168.0.10>
  DocumentRoot /var/web_projects/www_trudogolik/root/
 
  ServerAdmin alexandre@frolov.pp.ru
  ServerName www.trudogolik.ru

  <Directory "/var/web_projects/www_trudogolik/cgiprg/">
    Options ExecCGI
    AllowOverride none
  </Directory>
 
  ScriptAlias /cgiprg/ "/var/web_projects/www_trudogolik/cgiprg/"
</VirtualHost>

Здесь виртуальный Web-узел www.trudogolik.ru использует адрес IP из диапазона адресов, выделенного для локальных сетей, — 192.168.0.10.

Использование разных IP для виртуальных Web-узлов

Только что мы рассмотрели один из возможных способов конфигурирования виртуальных Web-узлов, когда несколько таких узлов совместно используют один адрес IP. В этом разделе мы расскажем о том, как назначить каждому виртуальному Web-узлу, работающему на одном и том же сервере, свой адрес IP.

Как правило, любая современная операционная система (в том числе RedHat Linux и Microsoft Windows) позволяет назначить каждому сетевому адаптеру несколько адресов IP. Инструкции по добавлению дополнительных адресов IP Вы найдете в руководстве администратора операционной системы.

Исходные данные для примера

Вот исходные данные для нашего примера:

·         компьютер имеет 4 адреса IP: 154.100.100.30, 154.100.100.31, 154.100.100.32 и 154.100.100.33;

·         на этом компьютере нужно создать четыре виртуальных Web-узла с доменными именами www.zerohops.ru, www.datarecovery.ru, www.trudogolik.ru и test.trudogolik.ru;

·         каждый виртуальный Web-узел должен использовать свой адрес IP;

·         для Web-узлов www.datarecovery.ru, www.trudogolik.ru и test.trudogolik.ru необходимо предусмотреть отдельные каталоги CGI-программ;

·         при обращении посетителей к Web-серверу по адресу http://localhost должна отображаться страница главного Web-узла, установленная вместе с сервером Apache (рис. 3-12)

Создание зон DNS для доменов виртуальных Web-узлов

Для нашего примера необходимо создать для доменов три зоны datarecovery.ru, zerohops.ru и trudogolik.ru на Вашем локальном сервере DNS.

Зона домена zerohops.ru должна содержать запись типа A для узла www.zerohops.ru следующего вида:

www  A 154.100.100.30

В зоне домена trudogolik.ru необходимо создать две такие записи для узлов www.trudogolik.ru и test.trudogolik.ru:

www  A 154.100.100.31
test A 154.100.100.32

И, наконец, зона домена datarecovery.ru должна содержать запись типа A для узла www.datarecovery.ru следующего вида:

www  A 154.100.100.33

При обращении посетителей к нашим Web-узлам система DNS будет направлять браузер на серверы с разными адресами IP. Сервер Apache будет распознавать виртуальные Web-узлы по их адресу IP, а не по доменному имени, как это было в предыдущем примере.

Настройка файла httpd.conf

Чтобы расположить виртуальные Web-узлы на разных адресах IP для каждого виртуального Web-узла необходимо добавить в конфигурационный файл httpd.conf пары команд <VirtualHost> и </VirtualHost> следующего вида:

<VirtualHost localhost>
  ServerName _default_
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"
  DirectoryIndex index.html
</VirtualHost>

<VirtualHost www.zerohops.ru>
  ServerName www.zerohops.ru
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.zerohops.ru/root/"
  ErrorLog logs/www.zerohops.ru-error_log
  CustomLog logs/www.zerohops.ru-access_log common
</VirtualHost>

<VirtualHost test.trudogolik.ru>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru
  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
  </Directory>
  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

<VirtualHost www.trudogolik.ru>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.trudogolik.ru/root/"
  ServerName www.trudogolik.ru
  <Directory "e:/!www.trudogolik.ru/cgi/">
    AllowOverride None
  </Directory>
  ScriptAlias /cgiprg/ "e:/!www.trudogolik.ru/cgi/"
</VirtualHost>

<VirtualHost www.datarecovery.ru>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/DataRecovery/"
  ServerName www.datarecovery.ru
  <Directory "e:/DataRecovery/scripts/">
    AllowOverride None
  </Directory>
  ScriptAlias /scripts/ "e:/DataRecovery/scripts/"
</VirtualHost>

Как видите, в качестве аргументов командам <VirtualHost> передаются доменные имена узлов. В соответствии с настройкой зон DNS все эти имена отображаются на разные адреса IP.

В самом начале списка команд <VirtualHost>, определяющих виртуальные Web-узлы, мы расположили описание узла http://localhost следующего вида:

<VirtualHost localhost>
  ServerName _default_
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"
  DirectoryIndex index.html
</VirtualHost>

В качестве аргумента командам <VirtualHost> и ServerName передаем имя localhost, соответствующее локальному интерфейсу 127.0.0.1. Поэтому при обращении к серверу по адресу http://localhost в окно браузера будет загружена главная страница HTML из каталога, заданного в нашем описании командой DocumentRoot. Сразу после установки Apache это будет страница, показанная на рис. 3-12.

Использованный в этом примере файл конфигурации Apache (для Microsoft Windows) представлен в листинге 3-3.

Листинг 3-3 Вы найдете в файле chap3\IPBased\httpd.conf на прилагаемом к книге компакт-диске.

Комбинированный способ

При необходимости Вы можете комбинировать описанные выше два способа конфигурирования виртуальных Web-узлов. При этом некоторые адреса IP могут быть использованы одновременно несколькими такими узлами, другие же адреса будут распределены по одному остальным виртуальным Web-узлам.

Исходные данные для примера

Исходные данные для примера комбинированной настройки виртуальных Web-узлов представлены ниже:

·         компьютер имеет 3 адреса IP: 154.100.100.30, 154.100.100.31 и 154.100.100.33;

·         на этом компьютере нужно создать четыре виртуальных Web-узла с доменными именами www.zerohops.ru, www.datarecovery.ru, www.trudogolik.ru и test.trudogolik.ru;

·         узлы www.trudogolik.ru и test.trudogolik.ru должны совместно использовать адрес 154.100.100.31;

·         узлы www.zerohops.ru и www.datarecovery.ru должны использовать адреса 154.100.100.30 и 154.100.100.33, соответственно;

·         для Web-узлов www.datarecovery.ru, www.trudogolik.ru и test.trudogolik.ru необходимо предусмотреть отдельные каталоги CGI-программ;

·         при обращении посетителей к Web-серверу по адресу http://localhost должна отображаться страница главного Web-узла, установленная вместе с сервером Apache (рис. 3-12)

Создание зон DNS для доменов виртуальных Web-узлов

Ниже мы показали настройку зон datarecovery.ru, zerohops.ru и trudogolik.ru на Вашем локальном сервере DNS, необходимую для использования комбинированного способа настройки.

Зона домена zerohops.ru должна содержать запись типа A для узла www.zerohops.ru следующего вида:

www  A 154.100.100.30

В зоне домена trudogolik.ru необходимо создать две такие записи для узлов www.trudogolik.ru и test.trudogolik.ru:

www  A 154.100.100.31
test A 154.100.100.31

Зона домена datarecovery.ru должна содержать запись типа A для узла www.datarecovery.ru следующего вида:

www  A 154.100.100.33

Когда посетители будут обращаться к серверу по доменным именам www.trudogolik.ru и test.trudogolik.ru, запросы будут приходить на адрес 54.100.100.31. При этом Web-будет различать такие запросы по доменным именам.

Если же посетители будут обращаться к Web-узлам www.zerohops.ru и www.datarecovery.ru, система DNS будет направлять браузер на серверы с адресами IP 154.100.100.30 и 154.100.100.33, соответственно. Эти виртуальные Web-узлы будут распознаваться сервером Apache по адресу IP.

Настройка файла httpd.conf

Чтобы сервер Apache мог использовать адрес 154.100.100.31 для виртуальных Web-узлов www.trudogolik.ru и test.trudogolik.ru, добавьте в файл httpd.conf следующую команду:

NameVirtualHost 154.100.100.31

Далее для виртуальных Web-узлов www.trudogolik.ru и test.trudogolik.ru необходимо добавить в конфигурационный файл httpd.conf пары команд <VirtualHost> и </VirtualHost>:

<VirtualHost 154.100.100.31>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.trudogolik.ru/root/"
  ServerName www.trudogolik.ru
  <Directory "e:/!www.trudogolik.ru/cgi/">
    AllowOverride None
  </Directory>
  ScriptAlias /cgiprg/ "e:/!www.trudogolik.ru/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.31>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru
  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
  </Directory>
  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

Обратите внимание, что в аргументах обеих команд <VirtualHost> указан один и тот же адрес 154.100.100.31.

Что же касается виртуальных Web-узлов www.zerohops.ru и www.datarecovery.ru, то для них необходимо использовать следующие пары команд <VirtualHost> и </VirtualHost>:

<VirtualHost 154.100.100.30>
  ServerName www.zerohops.ru
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.zerohops.ru/root/"
  ErrorLog logs/www.zerohops.ru-error_log
  CustomLog logs/www.zerohops.ru-access_log common
</VirtualHost>

<VirtualHost 154.100.100.33>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/DataRecovery/"
  ServerName www.datarecovery.ru
  <Directory "e:/DataRecovery/scripts/">
    AllowOverride None
  </Directory>
  ScriptAlias /scripts/ "e:/DataRecovery/scripts/"
</VirtualHost>

Здесь в аргументах команд <VirtualHost> мы указали разные адреса.

Полный файл конфигурации Apache (для Microsoft Windows), использованный в этом примере, представлен в листинге 3-4.

Листинг 3-4 Вы найдете в файле chap3\NameAndIPBased\httpd.conf на прилагаемом к книге компакт-диске.

Использование разных портов IP

Известно, что по умолчанию для запросов к серверам Web браузеры используют порт 80 протокола TCP/IP. При необходимости Вы можете изменить номер этого порта для всех или некоторых виртуальных Web-узлов.

Чтобы продемонстрировать эту возможность, мы немного изменим предыдущий пример. Теперь мы потребуем, чтобы виртуальные Web-узлы www.trudogolik.ru и test.trudogolik.ru, использующие общий адрес 154.100.100.31, работали на разных портах. Узел общего доступа www.trudogolik.ru должен работать на стандартном порту 80, а узел администрирования test.trudogolik.ru — на порту 8080.

Чтобы сервер Apache мог использовать об указанных порта, необходимо добавить в конфигурационный файл следующие две команды:

Listen 80
Listen 8080

Далее нужно использовать приведенное ниже определение виртуальных узлов:

NameVirtualHost 154.100.100.31

<VirtualHost 154.100.100.31:80>
  ServerName _default_
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"
  DirectoryIndex index.html
</VirtualHost>

<VirtualHost 154.100.100.31:80>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.trudogolik.ru/root/"
  ServerName www.trudogolik.ru

  <Directory "e:/!www.trudogolik.ru/cgi/">
    AllowOverride None
  </Directory>

  ScriptAlias /cgiprg/ "e:/!www.trudogolik.ru/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.31:8080>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru

  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
   </Directory>

  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

<VirtualHost 154.100.100.30>
  ServerName www.zerohops.ru
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/!www.zerohops.ru/root/"
  ErrorLog logs/www.zerohops.ru-error_log
  CustomLog logs/www.zerohops.ru-access_log common
</VirtualHost>

<VirtualHost 154.100.100.33>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/DataRecovery/"
  ServerName www.datarecovery.ru

  <Directory "e:/DataRecovery/scripts/">
    AllowOverride None
  </Directory>

  ScriptAlias /scripts/ "e:/DataRecovery/scripts/"
</VirtualHost>

Обратите внимание, что теперь в аргументах команды <VirtualHost> для узлов www.trudogolik.ru и test.trudogolik.ru мы указываем номера портов.

Кроме того, в начале списка определений мы разместили определение виртуального Web-узла, который получит управление, если посетитель укажет неправильный номер порта:

<VirtualHost 154.100.100.31:80>
  ServerName _default_
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"
  DirectoryIndex index.html
</VirtualHost>

Главная страница этого узла появится в окне браузера пользователя, если он, например, попытается получить доступ к узлу test.trudogolik.ru через порт 80.

Полный файл конфигурации Apache (для Microsoft Windows), использованный в этом примере, представлен в листинге 3-5.

Листинг 3-5 Вы найдете в файле chap3\PortBased\httpd.conf на прилагаемом к книге компакт-диске.

Доменные псевдонимы

В тех случаях, когда один и тот же виртуальный Web-узел должен отзываться на разные доменные имена, можно использовать команду ServerAlias.

В качестве аргумента этой команде можно передавать одни или несколько доменных имен. Ниже мы привели пример использования этой команды:

<VirtualHost 154.100.100.31:8080>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru
  ServerAlias admin.trudogolik.ru

  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
  </Directory>

  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

Определенный таким способом Web-узел будет доступен по двум адресам — http://test.trudogolik.ru:8080/ и http://admin.trudogolik.ru:8080/.

Заметим, что в аргументах команды ServerAlias можно использовать символы шаблонов ? и *. Первый из них соответствует одному любому символу, а второй — любому количеству любых символов. Ниже приведен пример использования символа шаблона:

ServerAlias *.trudogolik.ru

Виртуальный Web-сервер, в описании которого есть такая команда, будет откликаться на любое доменное имя, в окончании которого имеется суффикс «.trudogolik.ru».

Управление доступом к страницам Web-узла

Разработчики Web-приложений обычно ограничивают доступ к некоторым страницам Web-узлов, например, к страницам, предназначенным для администрирования или для предоставления какого-либо платного сервиса.

Для ограничения доступа посетителей к определенным каталогам или страницам Web-сервера можно использовать средства разграничения доступа операционной системы. Однако это не всегда удобно, а иногда и вовсе невозможно. Управление учетными записями клиентов средствами ОС может оказаться непростым делом, если Вы, например, представляете им виртуальные Web-узлы для создания каких-либо многопользовательских систем с разграничением доступа.

Команда <Directory>

С помощью команды <Directory> можно определить группу команд, действующих только для определенного каталога, а также всех подкаталогов данного каталога. В частности, с помощью этой команды можно ограничивать доступ посетителей Web-узла к тем или иным каталогам, а также разрешать или запрещать исполнение программ CGI, хранящихся в каталогах.

В качестве аргумента команде <Directory> указывается полный путь к физическому каталогу. При настройке сервера Apache в среде ОС Microsoft Windows этот путь указывается, например, так:

<Directory "e:/DataRecovery/scripts/">
  AllowOverride None
</Directory>

Ниже мы показали аналогичный пример для ОС Linux:

<Directory "/var/web_projects/www_trudogolik/cgiprg/">
  Options ExecCGI
  AllowOverride none
</Directory>

Современные версии сервера Apache допускают использование в аргументе команды <Directory> символов шаблона ? и * (первый из них соответствует одному любому символу, а второй — любому количеству любых символов). Можно также указывать диапазон символов с помощью скобок [], а также регулярные выражения. Подробнее о регулярных выражениях читайте в книгах, посвященных языку программирования Perl, например, в [12]. Регулярным выражениям посвящены и отдельные издания, такие как [18].

В наших примерах применения команды <Directory>, мы не будем пользоваться ни шаблонами, ни регулярными выражениями, так для многих применений эти возможности избыточны.

Команда <File>

Пара команд <Files> и </Files> позволяет задавать права доступа к отдельным файлам, например:

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files>

Здесь запрещается доступ посетителей Web-узлов к файлам, имя которых начинается со строки «.ht».

Команда <Location>

Для ограничения доступа к отдельным страницам Web-узлов по адресу IP посетителей используют команды <Location> и </Location>:

<Location /protected/members.html>
  Order Deny,Allow
  Deny from All
  Allow from 154.100.100.10
</Location>

В качестве аргумента команде <Location> нужно передавать адрес URL защищаемого документа без строки названия протокола «http://». Защищая каталог с документами, можно не указывать имена файлов, ограничившись только адресом URL каталога.

Ограничение доступа посетителей Web-узла к каталогу

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

Команды Order, Deny и Allow позволяют ограничивать доступ к каталогу, указанному в качестве аргумента команды <Directory>:

<Directory /usr/local/httpd>
  Order Deny,Allow
  Allow from all
</Directory>

С помощью команды Order задается порядок, в котором используются команды запрещения доступа Deny и разрешения доступа Allow.

Если эти команды указаны в порядке Deny,Allow, то вначале обрабатываются все команды запрещения доступа Deny, а затем — команды разрешения доступа Allow. При этом по умолчанию доступ к каталогу Web-узла разрешен для всех Интернет-узлов посетителей, адреса IP которых  не соответствуют условию, описанному в аргументе команды Deny.

При указании параметров в последовательности Allow,Deny доступ к каталогу по умолчанию запрещен. Только те клиенты, адреса IP которых соответствуют аргументу команды Allow, могут получить доступ (но только в том случае, если эти адреса не попадают под действие команды Deny).

В качестве аргумента командам Deny и Allow можно передавать одиночные адреса IP, списки и диапазоны адресов IP.

Вот пример команды ограничения доступа к каталогу виртуального Web-узла:

<Directory "e:/Admin123Trudogolik/root/">
  Order Deny,Allow
  Deny from All
  Allow from 154.100.100.10
  AllowOverride None
</Directory>

<VirtualHost 154.100.100.31:8080>
  ServerAdmin alexandre@frolov.pp.ru
  DocumentRoot "e:/Admin123Trudogolik/root/"
  ServerName test.trudogolik.ru
  ServerAlias admin.trudogolik.ru
  <Directory "e:/Admin123Trudogolik/cgi/">
    AllowOverride None
  </Directory>
  ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

Здесь доступ к каталогу e:/Admin123Trudogolik/root/ разрешается посетителю только в том случае, если его рабочая станция имеет адрес IP, равный 154.100.100.10.

При помощи следующей команды можно разрешить  только таким посетителям, рабочие станции которых находятся в сети 154.100.0.0 с маской 255.255.0:

Allow from 154.100.0.0/255.255.0.0

Можно разрешать или запрещать доступ по частичному доменному имени или по частичному адресу IP:

Allow from trudogolik.ru
Allow from 154.100

Необходимо заметить, что сама о себе описанная выше защита виртуальных Web-узлов от несанкционированного доступа, основанная на установке ограничений по адресам IP, не является достаточно надежной. Злоумышленники могут легко подменить адрес IP, получив таким образом доступ в обход системы защиты.

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

Поэтому ограничение доступа по адресу IP нужно дополнять другими видами защит, например, парольной защитой. Подробнее об этом читайте в разделе «Парольный доступ к страницам Web-узла» этой главы.

Ограничение доступа к каталогам программ CGI

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

Как мы уже говорили, для виртуальных Web-узлов создаются свои каталоги программ CGI. Для этого применяется команда ScriptAlias, определяющая псевдоним физического каталога программ CGI, называемый также виртуальным каталогом программ CGI:

ScriptAlias /cgiprg/ "/var/web_projects/www_trudogolik/cgiprg/"

В данном случае для доступа к программам CGI, расположенным в физическом каталоге  /var/web_projects/www_trudogolik/cgiprg/, необходимо использовать имя cgiprg.

Кроме того, необходимо определить доступ к каталогу программ CGI следующим образом:

<Directory "/var/web_projects/www_trudogolik/cgiprg/">
  Options ExecCGI
  AllowOverride none
/Directory>

Команда Options с аргументом ExecCGI разрешает исполнение программ в указанном каталоге, которое по умолчанию запрещено. Параметр AllowOverride с аргументом none запрещает переопределение прав доступа к каталогу в файле .htaccess, который мы рассмотрим ниже в разделе этой главы с названием «Файлы .htaccess».

Дополнив приведенный выше блок командами Order, Allow и Deny, можно ограничить доступ к каталогу, разрешив его только некоторым посетителям:

<Directory "/var/web_projects/www_trudogolik/cgiprg/">
  Order Deny,Allow
  Deny from All
  Allow from 154.100.100.10
  Options ExecCGI
  AllowOverride none
</Directory>

В данном случае только тот посетитель, рабочая станция которого имеет адрес 154.100.100.10, может запускать программы CGI из физического каталога /var/web_projects/www_trudogolik/cgiprg/.

Еще раз заметим, что адрес IP легко подделать, поэтому не полагайтесь только на этот метода защиты от несанкционированного доступа.

Файлы .htaccess

Помимо рассмотренных выше команд, сервер Apache использует средства управления доступом посетителей к каталогам Web-узлов, основанные на применении специальных файлов управления доступом. Это текстовые файлы, внутри которых могут располагаться определенные команды конфигурирования.

По умолчанию для файла управления доступом используется имя .htaccess, хотя при помощи команды AccessFileName, размещенной в файле httpd.conf, можно выбрать любое другое имя, например:

AccessFileName acl-file.dat

Имя .htaccess было придумано еще разработчиками сервера NCSA HTTPd, а затем оно стало использоваться и в Apache. Файлы операционной системы Unix, имена которых начинаются с точки, являются скрытыми и не отображаются обычными командами просмотра содержимого каталогов. Что же касается выбора имени «htaccess», то «ht» означает hypertext (гипертекст), а «access» — доступ. Таким образом, имя файла .htaccess означает следующее: скрытый файл управления доступом к гипертексту.

Поместив файл .htaccess в каталог, Вы можете определить права доступа для этого каталога. Кроме того, данный файл переопределит права доступа и для всех вложенных каталогов. Таким образом, с помощью одного файла .htaccess можно определить права доступа сразу к целому дереву каталогов. В том случае, когда одной из ветвей такого дерева необходимо назначить другие права доступа, достаточно разместить в корневом каталоге этой ветви свой файл .htaccess.

В том случае, когда Вы используете Web-сервер единолично, то Вы можете настраивать доступ с помощью файла httpd.conf или файлов .htaccess, размещаемых в каталогах Web-приложений.

Однако если Вы предоставляете ресурсы своего Web-сервера другим разработчикам Web-приложений, то из соображений безопасности не следует разрешать этим разработчикам редактировать файл httpd.conf. Вместо этого можно разрешить им располагать файлы .htaccess в каталогах своих Web-приложений и таким образом настраивать права доступа посетителей к виртуальным Web-узлам.

Обработка файлов .htaccess

По умолчанию при каждом обращении посетителей Web-сервера к любой странице сервер Apache просматривает все каталоги, лежащие на пути к этой странице, на предмет наличия в них файла .htaccess.

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

Для управления последовательностью просматриваемых каталогов используется команда AllowOverride, расположенная между командами <Directory> и </Directory>. Вместе с этой командой там обычно указываются и другие команды, задающие параметры доступа к каталогу.

Имя каталога, для которого определяется доступ, передается команде <Directory> в качестве аргумента, например:

<Directory />
  AllowOverride None
  Options FollowSymLinks
</Directory>

Здесь мы определили параметры для корневого каталога /.

Команда AllowOverride с аргументом None запрещает обработку файлов .htaccess, расположенных в корневом каталоге и всех его каталогов. Таким образом, приведенный выше блок команд блокирует использование файла .htaccess во всех каталогах файловой системы.

Команда Options с аргументом FollowSymLinks разрешает обработку символических ссылок, размещенных в корневом каталоге.

Определяя с помощью команды DocumentRoot путь к физическому каталогу документов HTML, обычно для него задают с помощью команды <Directory> и параметры доступа, например:

DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"

<Directory "D:/Program Files/Apache Group/Apache/htdocs">
  AllowOverride None
  Options Indexes FollowSymLinks MultiViews
  Order allow,deny
  Allow from all
</Directory>

Здесь в качестве каталога документов HTML главного Web-узла указан путь к каталогу D:/Program Files/Apache Group/Apache/htdocs.

С помощью команды AllowOverride None блокируется возможность применения в указанном каталоге файлов .htaccess. Чтобы задействовать все возможности файлов .htaccess в данном каталоге, нужно передать этой команде аргумент All.

Команда Options здесь разрешает просмотр содержимого каталога в виде списка файлов (аргумент Index), разрешает обработку символических ссылок (аргумент FollowSymLinks), а также так называемое согласование содержимого (content negotiation).

Команда Order определяет порядок использования директив разрешения и запрещения доступа. В нашем случае по умолчанию доступ запрещен для всех пользователей, и для разрешения доступа требуется явное использование команды Allow (аргумент Allow,Deny). Команда Allow с аргументом from all разрешает доступ к каталогу всем узлам Интернета.

Аргументы команды AllowOverride

Таким образом, с помощью команды AllowOverride, расположенной между командами <Directory> и </Directory>, Вы можете разрешать или запрещать использование файлов .htaccess в тех или иных каталогах сервера. Эта же пара команд, расположенная в файлах .htaccess, а также в файле httpd.conf, позволяет задавать права доступа к каталогам.

Если аргумент команды AllowOverride указан как None, то, как мы уже говорили, содержимое файла .htaccess полностью игнорируется. Сервер даже не читает эти файлы с диска.

Указав команде AllowOverride аргумент All, мы разрешаем серверу Apache интерпретировать все допустимые команды, расположенные в файлах .htaccess.

Можно также разрешать интерпретацию команд, принадлежащих только к некоторым группам, указывая команде AllowOverride аргументы AuthConfig, FileInfo, Indexes, Limit и Options.

В табл. 3-1 мы привели краткое описание перечисленных выше аргументов команды AllowOverride.

Таблица 3-1. Аргументы команды AllowOverride

Аргумент

Команды, разрешенные к использованию в файлах .htaccess

AuthConfig

Команды управления доступом к страницам Web-узлов, такие как AuthName, Satisfy и Require.

FileInfo

Команды, определяющие способ обработки файлов.

Indexes

Команды, разрешающие посетителям просматривать содержимое каталогов Web-узла в виде листинга файлов, а также команды, определяющие внешний вид таких листингов.

Limit

Команды принудительного контроля доступа, основанные на проверке адресов IP. Это такие команды, как Order, Allow и Deny.

Options

Дополнительные команды, в частности, команда Options.

All

Команды всех перечисленных выше категорий

None

Запрет интерпретации всех команд и чтения файлов .htaccess

Парольный доступ к страницам Web-узла

Сервер Apache снабжен удобными средствами предоставления парольного доступа к страницам Web-узлов, основанный на использовании файлов .htaccess. Когда посетитель пытается просмотреть содержимое защищенных страниц Web-узла, сервер посылает браузеру посетителя специальный запрос, в результате чего на экране его компьютера появляется окно аутентификации, показанное на рис. 3-18.

Рис. 3-18. Запрос идентификатора пользователя и пароля для доступа к Web-узлу

Чтобы получить доступ, посетитель должен ввести в поле User Name свой идентификатор, а в поле Password — пароль доступа.

Сервер Apache современных версий позволяет использовать два типа аутентификации — базовый (Basic) и аутентификацию с использованием MD5 (Digest). Первый тип аутентификации предполагает хранение идентификаторов пользователей и паролей в обычном текстовом файле. Аутентификация типа Digest обеспечивает более безопасный способ передачи паролей, но доступна только в самых новых версиях браузеров.

Базовая аутентификация

В этом разделе мы опишем процедуру защиты Web-узла http://test.trudogolik.ru от несанкционированного доступа с применением базовой аутентификации. Этот узел используется для администрирования Web-узла кадрового агентства http://www.trudogolik.ru, поэтому доступ к нему должен быть ограничен.

Создание файла идентификаторов и паролей

Первое, что Вам нужно сделать для организации такой защиты, это создать файл идентификаторов и паролей. Такой файл создается при помощи специальной программы htpasswd, входящей в комплект обслуживающих утилит сервера Apache.

Для создания нового файла паролей утилите htpasswd необходимо указать ключ –c, имя создаваемого файла идентификаторов и паролей, а также идентификатор первого пользователя:

D:\...\Apache\bin>htpasswd.exe -c apache.pwl frolov
Automatically using MD5 format on Windows.
New password: *******
Re-type new password: *******
Adding password for user frolov

В этом примере мы добавили пользователя с идентификатором frolov в файл apache.pwl. После запуска утилиты в консольном окне появляется запрос пароля. После ввода пароль нужно подтвердить.

Чтобы добавить в этот же файл идентификаторы и пароли других пользователей, необходимо запустить утилиту htpasswd еще раз, но уже без ключа –с. Вы можете получить краткую справку по использованию этого и других ключей, запустив утилиту htpasswd без параметров.

Если нужно изменить пароль добавленного ранее пользователя, повторите описанную выше процедуру без указания ключа –c.

Проверка имени файла управления доступом

Далее необходимо открыть конфигурационный файл httpd.conf и найти в нем команду AccessFileName. По умолчанию она имеет следующий вид:

AccessFileName .htaccess

Если Вы настраиваете сервер Apache в ОС Linux, можно оставить эту строку без изменений. Однако в том случае, когда сервер Apache будет работать в операционной системе Microsoft Windows или когда Вы будете редактировать файлы Web-узла в Microsoft Windows, необходимо задать другое имя для файла управления доступом. Это связано с тем, что Microsoft Windows не позволит Вам создать файл, имя которого начинается с точки.

Для изменения имени файла управления доступом используйте, например, такую команду AccessFileName:

AccessFileName acl.txt

Здесь в качестве аргумента мы указали команде AccessFileName имя файла acl.txt, допустимое и в ОС Microsoft Windows, и в ОС Linux.

Подключение файла управления доступом

Как мы уже говорили, для повышения производительности сервера по умолчанию использование файлов управления доступом .htaccess запрещается для корневого каталога и всех его подкаталогов. Это достигается размещением в файле httpd.conf следующих команд:

<Directory />
  AllowOverride None
  Options FollowSymLinks
</Directory>

Мы будем защищать от несанкционированного доступа документы HTML, виртуального Web-узла http://test.trudogolik.ru, расположенные в каталоге e:/Admin123Trudogolik/root. Поэтому нам необходимо разрешить анализ файла управления доступом, размещенного в этом каталоге:

<Directory "e:/Admin123Trudogolik/root/">
  Order Deny,Allow
  Allow from All
  AllowOverride All
</Directory>

<VirtualHost 154.100.100.31:8080>
    ServerAdmin alexandre@frolov.pp.ru
    DocumentRoot "e:/Admin123Trudogolik/root/"
    ServerName test.trudogolik.ru
    ServerAlias admin.trudogolik.ru
    <Directory "e:/Admin123Trudogolik/cgi/">
        AllowOverride None
    </Directory>
    ScriptAlias /cgiprg/ "e:/Admin123Trudogolik/cgi/"
</VirtualHost>

Здесь в группе команд, определяющих доступ к каталогу e:/Admin123Trudogolik/root, мы применили команду AllowOverride с аргументом All. В результате при обращении посетителей к любому документу из этого каталога сервер Apache будет анализировать команды, расположенные в файле управления доступом.

Подготовка файла управления доступом

Теперь настало время заняться подготовкой файла управления доступом. В соответствии с использованным нами аргументом команды AccessFileName, имя этого файла должно быть acl.txt.

Вот содержимое файла acl.txt, который мы подготовили для защиты доступа корневого каталога Web-узла http://test.trudogolik.ru:

AuthName "Trudogolik Site Administration Zone"
AuthType Basic
AuthUserFile "D:/Program Files/Apache Group/Apache/passwords/apache.pwl"
Require Valid-user

В этот файл нам нужно записать четыре команды — AuthName, AuthType, AuthUserFile и Require.

Аргумент команды AuthName может быть произвольной текстовой строкой, описывающей защищаемый Web-узел или зону защищаемого Web-узла.

С помощью команды AuthType с аргументом Basic мы указываем на необходимость использования базовой аутентификации.

Аргумент команды AuthUserFile должен содержать полный путь к файлу идентификаторов и паролей, подготовленных нами при помощи утилиты htpasswd. Вы можете записать этот файл в любой каталог, недоступный обычным посетителям Web-узлов.

И, наконец, аргумент valid-user команды Require говорит о том, что доступ к данному каталогу должен предоставляться только таким посетителям, которые в ответ на запрос (рис. 3-18) предъявили правильную комбинацию идентификатора и пароля. В качестве аргумента команде Require можно также передавать список идентификаторов пользователей, разделенных пробелами.

После того как Вы завершили все описанные выше шаги, подготовили файл управления доступом и записали его в защищаемый каталог, можно переходить к проверке функционирования настроенной Вами системы защиты от несанкционированного доступа.

Аутентификация типа Digest

Аутентификацию типа Digest не намного сложнее использовать, чем базовую аутентификацию. Для этого Вам нужно подключить модуль расширения сервера Apache с именем mod_auth_digest, создать файл паролей утилитой htdiggest, создать и задействовать файл управления доступом .htaccess.

Подключение модуля  mod_auth_digest

Многие функции сервера Apache реализуются модулями, которые можно подключать и отключать при необходимости. Сервер Apache поставляется с готовым набором модулей в виде программных файлов. После установки сервера эти файлы записываются в каталог с названием modules.

Чтобы использовать более безопасную по сравнению с базовой аутентификацию типа Digest, необходимо подключить к серверу Apache модуль mod_auth_digest. Это можно сделать, убрав символ комментария со следующей строки, расположенной в файле httpd.conf:

LoadModule digest_auth_module modules/mod_auth_digest.so

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

#LoadModule digest_module modules/mod_digest.so

Создание файла идентификаторов и паролей

Далее необходимо создать новый файл идентификаторов и паролей. Для аутентификации типа Digest нельзя использовать файл, созданный утилитой htpasswd.

Для создания нового файла паролей Вам потребуется утилита htdiggest. Запустите ее с ключом –c, передав имя создаваемого файла идентификаторов и паролей, произвольное имя защищаемой области Web-сайта (realm), а также идентификатор первого пользователя:

D:\...\Apache\bin>htdiggest.exe -c apache_digest.pwl trudogolik frolov
Adding password for frolov in realm trudogolik.
New password: *******
Re-type new password: *******

Далее Вам нужно два раза ввести пароль нового пользователя.

Для добавления новых пользователей в существующий файл или изменения пароля пользователя запускайте утилиту htdiggest без ключа –с.

Подключение файла управления доступом

Проверьте, что аргумент команды AllowOverride в блоке команд, определяющих права доступа к защищаемому каталогу, указан как All:

<Directory "e:/Admin123Trudogolik/root/">
  Order Deny,Allow
  Allow from All
  AllowOverride All
</Directory>

Если этот аргумент будет иметь значение None, сервер Apache проигнорирует файл управления доступом.

Подготовка файла управления доступом

Файл управления доступом, размещаемый в защищаемом каталоге, готовится аналогично тому, как мы это делали для базовой аутентификации:

AuthName trudogolik
AuthType Digest
AuthDigestFile "D:/Program Files/Apache Group/Apache/passwords/apache_digest.pwl"
Require Valid-user

Обратите внимание, что для команды AuthType мы указали аргумент Digest, определяющий одноименный тип аутентификации.

Кроме того, путь к файлу идентификаторов и паролей, подготовленному при помощи утилиты htdiggest, задается при помощи команды AuthDigestFile, а не AuthUserFile, как это было при использовании базовой аутентификации.

Другие возможности сервера Apache

Детальное изложение всех возможностей Web-сервера Apache может стать предметом для отдельной книги. Хотя мы и не претендуем на полноту описания всех настроек сервера Apache, в этом разделе мы рассмотрим некоторые, наиболее интересные, на наш взгляд, возможности.

Просмотр содержимого каталогов Web-узла

Как Вы знаете, обычно в каждом каталоге, предназначенном для хранения документов HTML, имеется один документ, называемый главным. Имя этого документа определяется командой DirectoryIndex при описании виртуального Web-узла:

DirectoryIndex index.html index.htm default.htm

Эта команда может задавать одно или несколько имен для главного документа.

Но что произойдет, если посетитель попытается просмотреть каталог, в котором нет файла главного документа?

По умолчанию он увидит в окне браузера сообщение о том, что доступ к корневому каталогу данного Web-узла запрещен (рис. 3-19).

Рис. 3-19. Сообщение об отсутствии доступа к корневому каталогу Web-узла

Здесь мы намеренно переименовали файл index.html в корневом каталоге Web-узла http://www.datarecovery.ru, а затем попытались просмотреть содержимое корневого каталога, указав его адрес URL.

В некоторых случаях удобно в аналогичной ситуации показывать посетителю вместо сообщения об отсутствии доступа список файлов, расположенных в каталоге. Щелкнув название нужного файла, посетитель сможет просмотреть его содержимое. Обычно такой доступ предоставляют к документам HTML, содержащим какие-либо описания или документацию.

Чтобы разрешить просмотр содержимого корневого каталога Web-узла http://www.datarecovery.ru и всех его подкаталогов, мы поместили в файл httpd.conf следующий набор команд:

<Directory "e:/DataRecovery/">
  AllowOverride None
  Options Indexes
</Directory>

Команда Options с атрибутом Indexes позволяет отобразить содержимое каталога в виде, показанном на рис. 3-20.

Рис. 3-20. Просмотр содержимого каталога Web-узла

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

При помощи команды IndexOptions можно изменять внешний вид листинга:

<Directory "e:/DataRecovery/">
  AllowOverride None
  Options Indexes
  IndexOptions –FancyIndexing
</Directory>

Этой команде передаются аргументы со знаком «+» или «-». Знак «-» выключает действие того или иного аргумента, а знак «+» — выключает.

В только что приведенном примере мы отключили действие аргумента FancyIndexing, обеспечивающего «фасонный» вид листинга. В результате посетитель увидит упрощенный вариант листинга, показанный на рис. 3-21.

Рис. 3-21. Простой список файлов и каталогов

Указав команде IndexOptions  аргументы ScanHTMLTitles и SuppressSize, мы добавим вывод заголовков документов HTML и отменим вывод размера файлов:

<Directory "e:/DataRecovery/">
    AllowOverride None
    Options Indexes
    IndexOptions +ScanHTMLTitles +SuppressSize
</Directory>

В результате листинг примет вид, показанный на рис. 3-22.

Рис. 3-22. Добавление описания содержимого документов HTML

При помощи команды AddDescription можно назначать описания для любых файлов, в частности, для файлов иллюстраций:

AddDescription "Рекламный баннер" /banner.gif

Команда HeaderName позволяет вставлять в начало листинга содержимое произвольного документа HTML.

Некоторые, наиболее интересные на наш взгляд, аргументы команды IndexOptions мы перечислили в табл. 3-2.

Таблица 3-2. Аргументы команды IndexOptions

Аргумент

Описание

DescriptionWidth

Ширина столбца описания файлов в символах. Если это значение указать как *, ширина автоматически устанавливается равной размеру наиболее длинного описания файла.

FancyIndexing

Включает форматное отображение списка файлов с красивым «фасонным» оформлением.

FoldersFirst

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

IconHeight

При формировании документа HTML с листингом файлов в теге <IMG> будет указана высота значков (в пикселах), отображаемых в листинге слева от имен файлов.

Обычно используется вместе с аргументом  IconWidth, и приводит к ускорению загрузки листинга в окно браузера. Ускорение связано с тем, что браузеру не нужно откладывать расчет внешнего вида страницы до завершения загрузки изображений значков.

Если высоту значков не указывать, будет использовано стандартное для сервера Apache значение.

IconWidth

Аналогично предыдущему, но указывается ширина значков, отображаемых в листинге слева от имен файлов.

IconsAreLinks

Значки файлов оформляются как ссылки на соответствующие документы. К сожалению, при этом появляется рамка вокруг значков, ухудшающая внешний вид листинга.

NameWidth

Ширина столбца имен файлов в символах. Если это значение указать как *, ширина автоматически устанавливается равной размеру наиболее длинного имени файла.

ScanHTMLTitles

Листинг должен включать в себя описание документа HTML, взятое из тега <TITLE> или из аргумента команды AddDescription.

Использование данной команды увеличивает нагрузку центрального процессора и диска, поэтому применяйте ее только при необходимости дать посетителям развернутое описание содержимого каталога.

SuppressColumnSorting

Отмена сортировки листинга, выполняемой щелчком мыши по заголовку столбца (заголовки Name, Last modified, Size и Description на рис. 3-20).

SuppressDescription

Отмена отображения строк описания файлов, показанных на рис. 3‑22.

SuppressHTMLPreamble

Отмена возможности вставки содержимого документа HTML, указанного при помощи команды HeaderName.

SuppressLastModified

Отмена отображения даты модификации файлов.

SuppressSize

Отмена отображения размера файлов.

Автоматический выбор национального языка документов

Всемирная сеть Интернет по своей сути интернациональна, поэтому содержимое многих Web-узлов представляется не на одном, а на нескольких национальных языках. Для российских Web-узлов, есть еще одна проблема, связанная с существованием нескольких кодировок для символов кириллицы. Вот их неполный список:

·         Windows-1251, принятая в операционной системе Microsoft Windows;

·         КОИ-8 (Linux и все Unix-подобные операционные системы);

·         ISO (Unix-подобные операционные системы);

·         CP-866 (IBM OS/2 и MS-DOS);

·         кодировка MacOS (операционные системы для компьютеров Macintosh).

Разработчики Web-приложений применяют два способа решения проблемы представления содержимого Web-узла на разных языках и в разных кодировках.

Первый способ предполагает «лобовое» решение — в каталогах Web-сервера размещается несколько комплектов документов HTML, каждый из которых составлен с применением своего национального языка и своей кодировки символов. На главной странице Web-узла http://www.spektrum.org.ru, например, располагается страница со ссылками win, koi, mac, dos, iso и translit, пользуясь которыми посетитель может выбрать нужный национальный язык или нужную кодировку символов (рис. 3-23).

Рис. 3-23. Ссылки на страницы с разными кодировками символов

Чтобы ссылки отображались правильно вне зависимости от настроек браузера, а также от наличия или отсутствия в операционной системе посетителя тех или иных шрифтов, они оформляются с применением латинских символов или графических изображений GIF или JPG.

Второй способ основан на использовании модулей Web-сервера, способных анализировать информацию, поступающую от браузера посетителей, и на основе этого анализа самостоятельно принимать решение о том, какие документы HTML и в какой кодировке отправлять посетителю. При использовании этого способа также предполагается, что разработчик Web-приложения подготовит и разместит на сервере несколько комплектов одних и тех же документов HTML на разных национальных языках и в разных кодировках.

Оба способа имеют свои преимущества и недостатки.

С одной стороны, применяя ссылки для перехода в разноязычные разделы Web-узла, а также в разделы с разными кодировками символов, мы избавляем посетителей от необходимости настраивать языковые параметры браузера и операционной системы. Посетитель может не обладать достаточной для этого квалификацией или не иметь физической возможности выполнить такую настройку из-за особенностей применяемого им компьютерного оборудования.

С другой стороны, автоматическая обработка информации, поступающей от браузера, позволяет посетителю Вашего Web-узла полностью отвлечься от необходимости выбора национального языка или кодировки — все будет сделано автоматически в соответствии с настройкой браузера. Посетителю не придется искать ссылки для выбора нужного языка или кодировки, вникать в то, какая кодировка или язык используется на его компьютере. Цена такой простоты — возможные ошибки при определении языка или кодировки, связанные с неправильной настройкой «языковых» параметров операционной системы и браузера.

Выбор наиболее подходящего способа мы оставляем за Вами, так как он зависит от назначения создаваемого Вами Web-узла, а также от состава его аудитории.

Что касается первого способа, то он реализуется простыми средствами HTML. Мы же рассмотрим в этом разделе настройки сервера Apache, позволяющие выполнить автоматический выбор нужного комплекта документов в зависимости от настроек ОС и браузера. Эти средства называются в документации Apache согласованием содержимого (content negotiation).

Согласование содержимого по именам документов

Когда браузер посетителя отправляет запрос документа HTML на Web-сервер, он передает ему в заголовках HTTP Content-type, Accept-Charset и Accept-Language информацию о своих возможностях по обработке документов различных типов, кодировок и национальных языков.

Если в конфигурацию сервера Apache входит модуль расширения mod_mime.c, то можно настроить Apache таким образом, чтобы он принимал перечисленные выше сведения о возможностях и настройках браузера, анализировал ее и отправлял посетителю документ с нужной кодировкой символов и составленный на нужном национальном языке.

Существует два способа включения режима автоматического согласования содержимого.

Первый способ основан на подготовке специального файла, в котором перечислены имена всех документов Web-узла и типы этих документов. Второй предполагает хранение документов с различными кодировками и составленный на различных национальных языках в файлах с разными расширениями имени. В нашей книге мы рассмотрим второй способ, так как, по нашему мнению, он легче в реализации.

Чтобы понять, о чем идет речь, взгляните на рис. 3-24.

Рис. 3-24. Набор документов HTML с разными кодировками

Здесь мы показали содержимое каталога главного Web-узла сразу после установки версии сервера Apache для операционной системы Microsoft Windows. Как видите, в каталоге имеется много вариантов одного и того же документа HTML, играющего роль главного документа index.html, отображаемого по умолчанию.

Национальный язык и кодировка каждого варианта однозначно определяется расширением имени. Например, файл с документом, составленным на английском языке, называется index.html.en, на французском — index.html.fr, и т.д. Что же касается русского языка, то для него подготовлено сразу несколько файлов для разных кодировок. Русский вариант файла с кодировкой Windows-1251 называется index.html.ru.cp-1251, с кодировкой КОИ-8 — index.html.ru.koi-8r и т.д.

Использование команд AddLanguage и AddCharset

Чтобы включить режим автоматического согласования содержимого по расширению имен файлов, в блоке описания Web-узла должна присутствовать команда Options с аргументом MultiViews:

<Directory "D:/Program Files/Apache Group/Apache/htdocs">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Заметим, что аргумент MultiViews, должен быть указан явным образом, даже если Вы указали аргумент команды Options как All.

Далее в файле httpd.conf должны присутствовать команды AddLanguage и AddCharset, как это показано ниже:

<IfModule mod_mime.c>
. . .
    AddLanguage da .dk
    AddLanguage nl .nl
    AddLanguage en .en
    AddLanguage et .ee
    AddLanguage fr .fr
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage he .he
    AddCharset ISO-8859-8 .iso8859-8
    AddLanguage it .it
    AddLanguage ja .ja
    AddCharset ISO-2022-JP .jis
    AddLanguage kr .kr
    AddCharset ISO-2022-KR .iso-kr
    AddLanguage no .no
    AddLanguage pl .po
    AddCharset ISO-8859-2 .iso-pl
    AddLanguage pt .pt
    AddLanguage pt-br .pt-br
    AddLanguage ltz .lu
    AddLanguage ca .ca
    AddLanguage es .es
    AddLanguage sv .se
    AddLanguage cz .cz
    AddLanguage ru .ru
    AddLanguage tw .tw
    AddLanguage zh-tw .tw
    AddCharset Big5         .Big5    .big5
    AddCharset WINDOWS-1251 .cp-1251
    AddCharset CP866        .cp866
    AddCharset ISO-8859-5   .iso-ru
    AddCharset KOI8-R       .koi8-r
    AddCharset UCS-2        .ucs2
    AddCharset UCS-4        .ucs4
    AddCharset UTF-8        .utf8
. . .
</IfModule>

Все эти команды имеются в файле httpd.conf сразу после установки Apache для Microsoft Windows. Они принимаются во внимание только в том случае, если установлен модуль расширения mod_mime.c, ответственный за определение типов документов.

Команда AddLanguage устанавливает соответствие между национальным языком документа и расширением имени файла, хранящего этот документ. Обозначение национального языка расшифровывается в табл. 3-3.

Таблица 3-3. Обозначение национального языка в команде AddLanguage

Язык

Обозначение

Язык

Обозначение

Английский

en

Норвежский

no

Голландский

nl

Польский

pl

Греческий

el

Португальский

pt

Датский

da

Португальско-бразильский

pt-br

Испанский

es

Русский

ru

Итальянский

it

Французский

fr

Каталанский

ca

Чешский

cz

Корейский

kr

Шведский

sv

Люксембургский

ltz

Эстонский

ee

Немецкий

de

Японский

ja

С помощью команды AddCharset устанавливается соответствие между обозначением кодировки символов и расширением имени документа.

Настройка браузера посетителя

Чтобы проверить работу системы автоматического согласования содержимого, установите в своем браузере возможность выбора нескольких национальных языков. Для этого выберите из меню Tools строку Internet Options, а затем щелкните кнопку Languages, расположенную на вкладке General (рис. 3-25).

Рис. 3-25. Выбор национальных языков в браузере Microsoft Internet Explorer

При помощи кнопки Add добавьте несколько национальных языков. После этого с помощью кнопок Move Up и Move Down Вы сможете изменять приоритет использования языков.

На рис. 3-25 мы показали страницу главного Web-узла Apache в том виде, в котором она появляется по умолчанию при настройке операционной системы для работы с русским языком.

После перемещения строки English (en) в верхнюю позицию списка Language, Вы сможете увидеть ту же самую страницу, но написанную на английском языке (рис. 3-26).

Рис. 3-26. Просмотр страницы, написанной на английском языке

Использование программы Apache Configuration

При установке операционной системы RedHat Linux версии 7.1 вместе с графическим интерфейсом KDE в Вашем распоряжении оказывается программа конфигурирования сервера Apache с названием Apache Configuration.

С помощью этой программы Вы сможете выполнить некоторые (не все) задачи конфигурирования сервера Apache без необходимости прямого редактирования файла httpd.conf. Более того, если Вы решили конфигурировать Apache программой Apache Configuration, редактировать файл httpd.conf нельзя.

Преимущества и недостатки Apache Configuration

Заметим, что для конфигурирования сервера Apache, установленного на площадке провайдера, программа Apache Configuration непригодна. Дело в том, что с целью повышения защищенности сервера от атак хакеров на таких серверах, как правило, не устанавливается графический интерфейс. В результате остается только одна возможность настройки Apache — путем непосредственного редактирования файла httpd.conf.

У программы Apache Configuration есть и другой недостаток. Эта программа не в состоянии полностью использовать все возможности файла httpd.conf, так как с помощью графического интерфейса нельзя создавать и редактировать любые команды Apache. Например, нам не удалось найти никаких средств для создания псевдонимов (алиасов) каталогов, предназначенных для хранения программ CGI.

Тем не мене, если у Вас уже установлена графическая оболочка KDE, мы рекомендуем испытать Apache Configuration. Это поможет Вам изучить основные возможности Apache.

Создание виртуального Web-узла при помощи Apache Configuration

В качестве примера мы рассмотрим процедуру создания виртуального Web-узла с помощью программы Apache Configuration.

Итак, запустите программу Apache Configuration, пользуясь меню программ оболочки KDE. Через некоторое время на экране появится окно Apache Configuration, показанное на рис. 3-27.

Рис. 3-27. Окно программы Apache Configuration

В этом окне имеются четыре вкладки, каждая из которых отвечает за настройку тех или иных параметров сервера Apache.

На вкладке Main, показанной на рис. 3-27, Вы можете указать доменное имя главного Web-сервера, а также адрес электронной почты Web-мастера, отвечающего за работу этого сервера. Кроме того, здесь имеется список адресов IP и портов, на которых Web-сервер принимает данные от браузеров посетителей.

С помощью кнопок Add, Edit и Delete Вы можете, соответственно, добавлять, редактировать и удалять эти адреса. Щелкнув кнопку Add, вы можете добавить новый адрес и порт в окне Add new address (рис. 3-28).

Рис. 3-28. Окно Add new address

Чтобы добавить новый адрес, отметьте флажок Address и введите адрес в поле, расположенное справа от этого флажка. В поле Port можно задать номер порта для данного адреса. Отметив флажок Listen to all addresses, мы разрешим серверу Apache использовать все адреса IP, установленные в системе.

Чтобы определить новый виртуальный Web-узел, откройте вкладку Virtual Hosts (рис. 3‑29).

Рис. 3-29. Вкладка Virtual Hosts

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

Чтобы добавить новый виртуальный узел, щелкните кнопку Add. На экране появится окно Virtual Host Properties (рис. 3-30).

Рис. 3-30. Окно Virtual Host Properties

В левой части этого окна имеется список разделов параметров создаваемого виртуального Web-узла. Выберите раздел General Options, как это показано на рис. 3-30.

Далее в поле Virtual Host Name введите доменное имя нового виртуального Web-узла. Щелкнув кнопку Browse, расположенную справа от поля Document Root Directory, укажите путь к заранее созданному каталогу документов HTML данного Web-узла.

Далее в поле Host Information Вам нужно выбрать тип виртуального Web-узла. Чтобы создать несколько виртуальных Web-узлов на одном адресе IP, выберите в списке строку Name based Virtual Host, как это показано на рис. 3-30. Далее введите в поле IP Address адрес IP, который будет использоваться данным виртуальным Web-узлом, а в поле Host Name — доменное имя создаваемого узла.

При необходимости можно создать несколько синонимов (алиасов) для доступа к данному виртуальному Web-узлу, воспользовавшись списком Aliases и расположенной справа от него кнопкой Add. С помощью кнопок  Edit и Delete можно, соответственно, редактировать и удалять псевдонимы виртуального Web-узла.

На следующем этапе необходимо открыть раздел Site Configuration (рис. 3-31).

Рис. 3-31. Раздел Site Configuration

Здесь Вы можете при необходимости изменить имена главных документов HTML для данного виртуального Web-узла. Это можно сделать с помощью списка Directory Page Search List и кнопок Add, Edit и Delete.

Список Error Pages позволяет настроить поведение сервера при возникновении ошибок. Вы можете оставить его в исходном состоянии.

Далее мы перейдем к разделу Logging (рис. 3-32), пропустив раздел SSL. Раздел SSL нужен для того, чтобы настроить виртуальный Web-узел таким образом, чтобы он мог использовать защищенный метод передачи данных с применением протокола SSL.

Рис. 3-32. Раздел Logging

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

Если виртуальный Web-узел должен работать с программами CGI или если нужно настроить права доступа посетителей к каталогам данного узла, откройте раздел Directories (рис. 3-33).

Рис. 3-33. Раздел Directories

Щелкнув кнопку Add, Вы сможете установить атрибуты доступа для выбранного каталога в окне Directory Options (рис. 3-34).

Рис. 3-34. Окно Directory Options

Фактически это окно позволяет создать в файле httpd.conf блок команды <Directory> и определить команды, размещенные внутри этого блока.

Работая с окном Directory Options, вначале нужно выбрать каталог, для которого устанавливаются параметры доступа. Это можно сделать с помощью кнопки Browse, расположенной в правом нижнем углу окна Directory Options.

Флажки, расположенные в поле Order, позволяют выбрать порядок обработки команд Deny и Allow, предназначенных, соответственно, для запрещения или разрешения доступа к узлу посетителей, рабочие станции которых имеют те или иные адреса IP. С помощью флажков и полей, расположенных в полях Deny List и Allow List, Вы можете задать адреса IP или диапазоны адресов IP, на которые распространяются ограничения или разрешения доступа.

Отмечая флажки из списка Options, можно указывать отдельные режимы доступа. Например, для каталогов программ CGI нужно отметить флажок ExecCGI.  Если посетителям разрешено просматривать содержимое каталога в виде списка файлов, нужно отметить флажок Indexes. Флажок Let .htaccess files override directory options разрешает интерпретацию файлов .htaccess, расположенных в данном каталоге и всех его подкаталогах.

Изменив необходимые параметры виртуального Web-узла во всех разделах, щелкните кнопку OK. Теперь на вкладке Virtual Host (рис. 3-35) в одноименном списке появится строка, соответствующая только что созданному виртуальному Web-узлу.

Рис. 3-35. Появился новый виртуальный Web-узел

Теперь, чтобы изменения вступили в силу, необходимо перезапустить сервер Apache.

Детальное описание всех возможностей программы Apache Configuration выходит за рамки нашей книги. Вы найдете полное описание этой программы в документации на операционную систему RedHat Linux. Как мы уже говорили, эта документация есть на дистрибутивном диске операционной системы RedHat Linux версии 7.1, а также на Web-узле http://www.redhat.com.

Еще раз заметим, что мы привели описание программы Apache Configuration только для полноты изложения и для того, чтобы Вы могли потренироваться в конфигурировании сервера Apache с ее помощью. Что же касается конфигурирования сервера Apache, размещенного на площадке провайдера, мы рекомендуем выполнять ее непосредственным редактированием файла httpd.conf.

[Назад] [Содержание] [Дальше]