Конфигурирование Apache 2.0

Базовые директивы || Права доступа к файлам и каталогам || SSI (Server Site Includes) || Виртуальный сервер (VirtualHost) || Подключение PHP

А также Файл .htaccess и директивы прав доступа ||

Файл httpd.conf на русском ||

Configuration Directives in httpd.conf (Apache 2.0) ||

Статья "Веб-сервер Apache - настройка и администрирование системы" (А.Пашков, А.Сергеев, А.Сутулов) ||


Базовые директивы.

Основная конфигурация Apache заключена в файле httpd.conf, расположенном в каталоге:

c:\usr\local\apache\conf\
или /usr/local/apache/conf  (или в той директории, которая была указана при сборке как параметр /configure)

Это обычный текстовый файл. Знак '#' является комментарием.

Файл конфигурации Apache состоит из 3-х больших секций:

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

ServerName mydomain.ru- имя запущенного web-сервера. Оно возвращается клиенту в HTTP-заголовке и идентифицирует web-сервер, выполнивший запрос. При реальной работе сервера в интернете имя должно уже существовать и быть прописанным в DNS. При локальной установке web-сервера для отладки и тестирования сайтов это не принципиально - имя может быть любым.

ServerAdmin yourname@domain.com - электронный адрес администратора, используемый в некоторых автоматически генерируемых сообщениях об ошибках web-сервера, таких как отсутствие странички, к примеру. Параметр должен быть определен как минимум для главного сервера, иначе Apache также откажется запускаться.

ServerRoot "/usr/local/apache" - каталог, в котором был размещен Apache при установке. Если вы пожелаете переместить его в другое место, то данную строчку нужно будет скорректировать, как, впрочем, и все остальные строчки в файле, указывающие на данный каталог.

ServerAlias www.mydomain.ru - команда создания алиасов для имени запущенного web-сервера.

Port 80 - порт, по которому Apache будет отслеживать HTTP-запросы. По умолчанию он равен стандартному значению для web-серверов, и у Вас вряд ли возникнет необходимость в его изменении.

DocumentRoot "/usr/local/apache/htdocs" - адрес каталога, используемого для хранения HTML-страничек. По умолчанию данный параметр указывает на документацию Apache, поставляемую в дистрибутиве и расположенную в вышеуказанном каталоге.

UserDir "c:/usr/local/apache/users/" - каталог, используемый для хранения страничек пользователей, доступ к которым будет возможен по адресу:

http://www.domain.com/~user/

Поскольку мы ставим web-сервер для локальной отладки сайтов, а не для реальной работы в интернете, то, данную строчку вам менять не нужно.

DirectoryIndex index.html index.htm - параметр, определяющий имя файла, который будет искать Apache, если указан не полный URL. То есть такой, который заканчивается именем каталога, а не адресом конкретной странички. В том числе это относится и к файлу, который открывается по умолчанию при наборе основного URL. Например, если вы набрали в адресной строке:

http://www.domain.com/links/, то на самом деле Apache откроет страничку:  http://www.domain.com/links/index.htm

Полный список файлов, которые будут искаться в директории, как раз и определяется этим параметром. Имена файлов отделяются друг от друга пробелом. При этом имеет значение порядок, в котором перечислены альтернативные имена: если в каталоге есть файлы с именем и index.htm, и index.html, то Apache откроет именно вторую страничку, поскольку в списке index.html стоит раньше, чем index.htm.

Alias /icons/ "/usr/local/apache/icons/" - команда создания алиасов, то есть ссылок, для любых каталогов. Например, вышеприведенная команда делает доступным содержимое каталога /usr/local/apache/icons/" по адресу:

http://www.domain.com/icons/

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

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" - данная команда аналогична предыдущей с той лишь разницей, что определяет реальное местоположение каталога с выполняемыми CGI-скриптами.

AddType text/html .html .htm - команда, определяющая тип mime для файла с заданным расширением. В данном случае мы присваиваем расширениям .html и .htm тип обычного гипертекста, и Apache будет интерпретировать его как html-код. Точнее, интерпретировать-то придется броузеру - web-сервер лишь выдаст ему указание о том, что это гипертекст. А вот если этой строчки не будет, то Apache выдаст странички с таким расширением за обычные текстовые файлы.

AddHandler server-parsed .shtml - команда, определяющая обработчик (автоматически запускаемую программу) для файла с указанным расширением. В данном случае мы связываем расширение .shtml со встроенным обработчиком SSI-директив. И, следовательно, все файлы, имеющее данное расширение, перед выдачей пользователю, будут проходить предварительную обработку. Если говорить более конкретно, то Apache заменит все SSI-вставки на соответствующие им значения. См. также директиву Action.

Action perl "/_Kernel/Scriptor.pl" - команда, определяющая что адрес /_Kernel/Scriptor.pl теперь имеет синоним (вернее, имя обработчика) — perl. Можно было бы использовать и другое слово вместо perl, — например, nakosikasukasena. Пример:

Action perl "/_Kernel/Scriptor.pl"

AddHandler perl .htm

В данном примере, при наборе в браузере адреса какой-либо страницы с расширением htm (http://dklab.ru/test.htm) клиенту на самом деле перешлется не она, а нечто другое. В нашем примере — результат работы скрипта /_Kernel/Scriptor.pl.

ErrorDocument 404 /error404.html - директива, определяющая страничку, которая будет отослана пользователю при возникновении ошибки. В данном случае была определена страничка для самой распространенной 404-ой ошибки. Данная директива не обязательна, и в случае ее отсутствия Apache сгенерирует стандартную страничку. Но согласитесь, что определить свою собственную страничку ошибки и, кроме того, сделать ее в едином стиле сайта, гораздо привлекательнее. Путь к страничке ошибки может быть указан либо локально (тогда он должен обязательно начинаться от корня сайта), либо указанием полного URL-странички.

ErrorLog logs/error.log - команда, определяющая имя файла, куда будут записываться все ошибки, возникающие при загрузке страничек или выполнении CGI-скриптов. Так что если что-либо не ладится - Apache не запускается, Perl-скрипты не работают, графика на страничках не грузится, - этот файл может помочь вам разобраться в проблеме.

CustomLog logs/access.log common - директива, аналогичная предыдущей, но с тем отличием, что используется для протоколирования всех запросов к web-серверу. На основе его анализа можно получить полный отчет по посещаемости сайта и популярности отдельных разделов.



Настройка прав доступа к файлам и каталогам.

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

Для каталога:

<Directory directory>
   Здесь перечисляются все директивы, управляющие доступом и опциями каталога
</Directory>

Для файла(ов):

<Files filename>
   Здесь перечисляются все директивы, управляющие доступом к файлу(ам)
</Files>

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

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

Важно отметить, что конфигурирование поведения web-сервера при помощи .htaccess возможно только в случае, если это разрешено в правах вышестоящего каталога (см AllowOverride). Основные директивы, используемые для определения прав:

Options option_list - директива, определяющая дополнительные опции для конкретного каталога. Опции отделяются друг от друга пробелами. Основные из них следующие:

AllowOverride - директива, разрешающая переопределять параметры доступа для нижележащих каталогов. После данной команды должен быть указан список директив, разрешенных к переопределению. Например, AllowOverride All - разрешает переопределение любых прав, AllowOverride Options - разрешает переопределение опций для каталога, AllowOverride None - запрещает переопределение прав.

Order allow, deny - порядок наложения прав доступа к файлу или каталогу с определенных IP-адресов или доменных имен. Может использоваться маска для отсеивания целых сегментов сети. В данном случае вначале определяются сайты, доступ к которым разрешен, а потом те, к которым запрещен. В случае команды Order deny, allow - все наоборот.

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

Deny from - список IP-адресов или доменных имен, доступ с которых запрещен. Так же, как и в предыдущем случае, может быть указана группа доменов или маска IP-адресов.

 

Настройка SSI (Server Site Includes).

Технология SSI включается указанием следующих двух директив:

AddType text/html .shtml
AddHandler server-parsed .shtml

Добавьте в секцию "Document type" файла конфигурации две эти строчки (или просто раскомментируйте их) и скорректируйте список файлов по умолчанию, добавив туда имя index.shtml:

DirectoryIndex index.htm index.html index.shtml

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

<Directory />
  Options Indexes Includes
  AllowOverride All
</Directory>

Больше для поддержки технологии SSI ничего не требуется.

 

Настройка виртуального сервера (VirtualHost)

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

Рекомендуется для интернет-проектов использовать структуру каталогов, представленную ниже:

/web/ - каталог, используемый для интернет-проектов;
/web/project/ - каталог для нашего проекта, который мы так и назовем - project;
/web/project/website/ - здесь будут размещены странички сайта;
/web/project/cgi-bin/ - здесь могут размещаться CGI-скрипты на Perl;
/web/project/logs/ - ну, а этот каталог будет содержать лог-файлы web-сервера.

Как уже было сказано выше, директивы, определенные в секции виртуального хоста, переопределяют глобальные значения. Но для начала нужно разобраться, каким образом определить сам виртуальный хост. Это делается при помощи одноименной директивы VirtualHost. Ниже приведен фрагмент, описывающий виртуальный сервер для нашего проекта. Добавьте его в самый конец конфигурационного файла - именно там находится секция для определения виртуальных хостов:

<VirtualHost 127.0.0.2>
  ServerAdmin yourmail@mydomain.ru
  ServerName mydomain.ru
  ServerAlias www.mydomain.ru
  DocumentRoot "/web/project/website"
  ScriptAlias /cgi-bin/ "/web/project/cgi-bin/"
  ErrorLog /web/project/logs/error.log
  CustomLog /web/project/logs/access.log common
</VirtualHost>

Итак, в первой строчке определен IP-адрес, по которому будет осуществляться доступ к виртуальному хосту.

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

Далее следует важная строчка, определяющая местоположения документов для нашего сайта. Формат записи полностью аналогичен базовому серверу. Точно так же переопределены алиасы к CGI-скриптам и пути к лог-файлам. Заметьте, что в качестве значений мы использовали каталоги, которые создали несколькими абзацами выше.

После добавления виртуального хоста Apache необходимо перезапустить - чтобы изменения вступили в силу. Наш виртуальный хост теперь будет доступен по адресу 127.0.0.2. Если что-то не получается и сервер отказывается запускаться, то посмотрите, что написано в файле error.log. Скорее всего, там будет указано на ошибку в синтаксисе конфигурационного файла.

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

<html>
<head>
<title>Тестирование технологии SSI</title>
</head>

<body>

<!--#include virtual="test.inc" -->

</body>
</html>

и сохраните его под именем index.shtml. Также создайте файл test.inc со следующим содержимым:

<p>Поздравляю, технология  SSI работает!</p>

Если вы увидели в броузере поздравление, то все в порядке: SSI работает, а кроме того функционирует и новое расширение по умолчанию - index.shtml. Если у Вас что-то работает некорректно, еще раз внимательно перечитайте последние несколько абзацев и убедитесь, что вы все сделали правильно.



Настрока PHP4 (PHP5)

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

Теперь необходимо настроить Apache и PHP для совместной работы. Есть два основных способа установки PHP - как обычной CGI-программы и как модуля Apache. Мы рассмотрим оба и начнем с конфигурирования PHP как обычной CGI-программы.

Установка PHP как CGI-программы

Основную работу по настройке придется провести над файлом конфигурации Apache. Вначале нам необходимо определить новый тип файла и сопоставить его с расширениями, используемыми PHP. Для этого добавляем в секцию "Document types" следующую строчку:

AddType application/x-httpd-php .phtml .php

Теперь необходимо назначить обработчик для данного типа файлов, поэтому добавьте сразу после определения типа следующий фрагмент:

ScriptAlias "/__php_dir__/" "c:/usr/local/php4/"
Action application/x-httpd-php "/__php_dir__/php.exe"

<Directory "/usr/local/php4">
  Options ExecCGI
</Directory>

И, наконец, мы добавим в список индексных файлов значение index.php. Для этого найдите и подкорректируйте следующую строчку:

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

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

<html>
<head>
<title>Тестирование технологии PHP</title>
</head>

<body>

<?
echo "Поздравляю, технология PHP работает!";
?>

</body>
</html>

и сохраним его под именем test.php в каталоге, который мы ранее определили для хранения HTML-файлов нашего проекта. Теперь, набрав в броузере строчку:

http://project/test.php  или    http://127.0.0.2/test.php

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

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

Установка PHP как модуля Apache.

Первым делом нам необходимо найти скомпилированный модуль PHP для подключения его к Apache.

Теперь нужно настроить некоторые переменные в конфигурационном файле Apache. Как и при установке PHP в виде CGI-программы, необходимо добавить в секцию "Document types" определение нового типа документа:

AddType application/x-httpd-php .phtml .php

И подкорректировать строчку, содержащую список индексных файлов:

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

Теперь самое важное - конфигурируем загрузку модуля. Найдите в конфигурационном файле секцию "Dynamic Shared Object (DSO) Support" и добавьте в нее следующую строчку:

LoadModule php4_module "/usr/local/php4/php4apache.dll"   
LoadModule php4_module "/usr/local/apache2/modules/libphp4.so

Конфигурирование можно считать оконченным. Осталось только протестировать работоспособность PHP. Не забудьте только сначала сохранить файл и перезапустить Apache. Для тестирования можно воспользоваться уже написанным ранее скриптом test.php. Наберите в броузере строчку:

http://project/test.php

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

И небольшое замечание для тех, кто уже конфигурировал PHP как CGI-программу, а теперь пробует установить его как модуль, не забудьте удалить из конфигурационного файла Apache секцию, связывающую обработчик типа файла с CGI-программой. Ведь в данном случае всей обработкой php-файлов занимается уже внешний модуль. Я имею в виду вот этот фрагмент:

ScriptAlias "/__php_dir__/" "c:/usr/local/php4/"
Action application/x-httpd-php "/__php_dir__/php.exe"

<Directory "c:/usr/local/php4">
  Options ExecCGI
</Directory>