Apache: Начинаем играть в индейцев.


Итак, перед Вами по тем или иным причинам встала задача сделать WEB-сервер. Скорее всего, начальству надоело Ваше ежедневное сидение в Internet, и оно решило, что раз уж платит за пользование сетью, то из этого надо попытаться извлечь прибыль. Или Вы просто решили прославиться во всемирной сети, заработать кучу денег, купить последнюю модель Mersedes ... так или иначе - но WEB-сервер делать надо.

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

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

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

Еще одна проблема для создателя русскоязычного WEB-сайта - проблема русской кодировки. На сегодняшний день их как-минимум четыре : Koi-8, CP-1251, ibm866 и iso8859-5. Можно, конечно, весь сервер хранить в кои - и точка. Однако, на взгляд автора, это неуважение к пользователям программы Windows. Наоборот, сервер, видный только в CP-1251 будет недоступен пользователям открытых систем. И именно Apache поможет Вам в решении этой проблемы.

Инициативная группа под руководством Дмитрия Крюкова взяла одну из ранних версий Apache, и пользуясь возможностью включения в код сервера внешних модулей, начала разработку так называемого RussianApache, позволяющего разработчику WEB-сайта не заботиться о кодировках, а сосредоточиться на разработке содержимого сайта, переложив заботу о кодировках на Вас ( как на администратора WEB-сервера ). И, отмечаю, RussianApache Вам в этом очень сильно поможет. Где взять?

Итак, Вам нужен WEB-сервер, причем именно RussianApache. Самый простой способ его достать - открыть любой WEB-броузер или воспользовавшись программой ftp зайти по адресу ftp://apache.lexa.ru/pub/apache-rus и взять последнюю версию WEB-сервера ( на момент написания статьи это 1.2.5rusPL21.4, файл 'apache_1.2.5rusPL21.4.tar.gz' ).

Далее необходимо определиться, в какой директории будет находиться программное обеспечение сервера. Группа разработчиков Apache считает, что это будет /usr/local/etc/httpd, автор предпочитает /usr/httpd ( чтобы далеко не лазить ). Оба этих решения абсолютно идентичны с точки зрения функционирования Apache, поэтому, чтобы не заострять на этом внимания, опишем переменную окружения

www% setenv HTTP_HOME /usr/httpd

и в дальнейшем будем пользоваться этой переменной для именования файлов Apache.

Теперь нужно собрать Apache. У вас в ${HTTP_HOME} лежит файл apache_1.2.4rusPL21.3.tar.gz, представляющий собой последнюю версию сервера. Перейдем в директорию /tmp и дадим команду :

www% gzip -c -d ${HTTP_HOME}/apache_1.2.5rusPL21.4.tar.gz | tar xvf -

Если у Вас в системе все настроено правильно, то у Вы увидете кучу файлов, которые развернутся в директории apache_1.2.5rusPL21.4.

Зайдите в директорию apache_1.2.5rusPL21.4/src и отредактируйте файл httpd.h : найдите в нем строчку

#define HTTPD_ROOT "/usr/local/etc/httpd"

и замените этот путь, где будет стоять Ваш Apache ( например, /usr/httpd ).

После этого необходимо применить стандартную процедуру сборки свободно-распространяемых программ. Для этого в текущей директории ( apache_1.2.5rusPL21.4/src ) дайте последовательность команд :

www% ./Configure
www% make

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

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

Но, прежде чем приступать к настройке, скопируем Apache в его рабочую директорию :

www% cp httpd ${HTTP_HOME}
www% cd ..
www% cp -r LICENSE README conf htdocs icons support ${HTTP_HOME} . Настройка.

Итак, вспомним, что же у нас есть на настоящий момент :

Определенная переменная окружения HTTP_HOME;
файл ${HTTP_HOME}/httpd, представляющий собой собранный Apache;
директория ${HTTP_HOME}/conf/, в которой будут лежать файлы конфигурации;
этого набора достаточно для успешной работы Apache. Создайте еще директорию ${HTTP_HOME}/logs для лог-файлов Apache - и в путь.
Первый файл, который нужен для работы Apache - ${HTTP_HOME}/conf/httpd.conf. В поставку входит пример такого файла ( ${HTTP_HOME}/conf/httpd.conf-dist ), но для того, чтобы хорошо научиться настраивать Apache, мы создадим его сами.

Итак, создайте этот файл и загрузите его в любой редактор ( автор использует textedit, но Вы можете воспользоваться любым другим, включая vi ). Первое, что нужно определить, это режим работы Apache.

Издавна повелось, что многие UNIX-сервисы запускались специальным демоном, который называют суперсервером Internet ( inetd ). Это демон слушал порты соответствующих сервисов, и при запросе определенного типа сервиса ( например, telnet или ftp ) запускал программу-демона, определенную для этого сервиса. Сделано это было в те времена, когда памяти в компьютерах было мало - и чтобы не держать в памяти множество сложных демонов, сеть слушал достаточно простой inetd.

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

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

ServerType standalone

Далее нужно задать порт, на котором Apache будет слушать запросы. По-умолчанию, это порт 80, и при стандартном обращении к Вашему серверу программа Netscape использует этот порт. Поэтому следующая наша строчка имеет вид :

Port 80

Считается, что все стандартные сервисы UNIX имеют номера портов меньшие 1024. Поэтому порты с номерами меньшими 1024 называют привилегированными портами, и открывать их позволено только суперпользователю. Сделано это для того, чтобы программа злоумышленника не смогла замаскироваться под стандартный сервис. Поэтому, задав для Apache 80-й порт, тем самым Вы обязали себя запускать его из-под суперпользоваетлся. Однако для нормального функционирования Apache вовсе не нужны привилегии суперпользвотеля. Более того, такой режим функционирования является достаточно опасным для системы, на которой работает Apache.

Привилегии суперпользователя нужны Apache только при старте - чтобы открыть 80-й порт - а далее он может функционировать под именем другого пользователя. Мы советуем Вам завести для него специального пользователя http, входящего в группу http и максимально уменьшить права этого пользователя в системе. В идеале, этот пользователь должен иметь доступ только к тем директориям, которые Вы хотите сделать видимыми через Ваш WEB-сервер. Создав пользователя, добавим в httpd.conf строчки :

User http
Group http

обязав тем самым Apache работать от имени этого бесправного пользователя.

Далее надо задать имя сервера, на которое будет откликаться Вас сервер. Делается это директивой

ServerName www.your-domain.ru

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

DocumentRoot /usr/httpd/htdocs

( здесь предполагается, что все Ваши документы находятся в директории /usr/httpd/htdocs. Мы так-же рекомендуем задать имеено эту директорию, если у Вас еще нет никаких документов - в /usr/httpd/htdocs находится стандартное руководство в HTML-формате, поставляемое с дистрибутивом Apache ).

В принципе, этого было бы достаточно, если бы не одна тонкость. Разработчики Apache, понимая, что при существующих порядка 150-ти директивах указание их в одном файле сделало бы его плохо-читаемым, решили упростить жизнь пользователям. Они предполагают, использование 3-й файлов : httpd.conf ( общие директивы конфигурации сервера ), srm.conf ( конфигурация ресурсов сервера - информация о том, где расположены документы, как их обрабатывать и подобная информация ) и access.conf ( конфигурация доступа к серверу - пароли, права на определенные директории ) - однако при запуске Apache определяет только положение файла httpd.conf. По-умолчанию, это ${HTTP_HOME}/conf/httpd.conf, имеется возможность переопределение местоположения этого файла. А вот расположение остальных 2-х файлов Apache ищет в httpd.conf. Но так как в нашей конфигурации эти файлы не нужны ( мы всю работу Apache опишем в httpd.conf, то мы просто отключим остальные файлы :

AccessConfig /dev/null
ResourceConfig /dev/null

Все, у нас получился работающий WEB-сервер ! Запускаем ( в этом месте необходимо воспользоваться правами пользователя root:

www# /usr/httpd/httpd
www#

У Вас получился работающий WEB-сервер ! Можете запустить Netscape и набрать в нем адрес сервера http://www.your-domain.ru - и Вы увидете свои документы.

Однако это, конечно, не все. Мы освоили только простейшую настройку Apache. О подробном конфигурировании WEB-сервера Apache мы поговорим в следующей статье.

Обновлено: 13.03.2015