Журнал LinuxFormat - перейти на главную

LXF84:Apache

Материал из Linuxformat
Перейти к: навигация, поиск
Новая серия! Web-сервер Apache для начинающих web-мастеров и администраторов

Содержание

Apache: друг "бледнолицых"

ЧАСТЬ 1: По данным http://www.netcraft.com, более 60% web-серверов по всему миру работают под управлением Apache. Причиной такой популярности является непревзойдённая гибкость и мощь этого сервера наряду с высокой скоростью работы. Сергей Супрунов поможет вам принять его на службу...

Немного истории

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

И вот в начале 1995 года Брайан Белендорф (см. LXF80) и Клиф Скольник, взяв за основу последнюю версию httpd, выпущенную NCSA, и применив к ней огромное количество найденных в сети патчей, выпустили первую версию того, что ныне известно под именем Apache [Собственно, название происходит от «A patchy server» – пропатченный сервер, – прим.ред.]. С тех пор сервер активно развивается, и сейчас является одним из самых успешных открытых проектов.

Установка

В настоящее время идет разработка трех ветвей сервера – Apache 1.x (текущая версия – 1.3.37) и две ветки Apache 2.x (последние версии - 2.0.59 и 2.2.3 соответственно). Конкретные дистрибутивы могут содержать более ранние версии.

Если Apache включен в состав вашего дистрибутива или доступен для установки из репозитория, предпочтительно использовать эту возможность. Впрочем, при необходимости инсталляцию можно выполнить и из исходных кодов. В данной статье я использовал версию 2.0.55, установленную в Ubuntu с помощью Synaptic. Про инсталляцию из исходных текстов рассказано в «Ручная работа».

Ручная работа

Менеджер пакетов, это, конечно, хорошо. Но какой же настоящий линуксоид не попробует хотя бы раз в жизни поставить что-то из исходников? Благо, и повод у нас для этого весьма благородный – хочется 2.2.3, а в репозитарии есть только 2.0.55. Так что – в путь!

1. Скачайте архив с последней версией с сайта http://httpd.apache.org:

wget http://apache.rinet.ru/dist/httpd/httpd-2.2.3.tar.bz2

2. Распакуйте его в свой домашний каталог:

tar xvjf httpd-2.2.3.tar.bz2

3. Сконфигурируйте исходный код:

cd httpd-2.2.3
./configure --prefix=/usr/local/apache22

С помощью --prefix мы изменили каталог установки, чтобы случайно не затереть уже установленный 2.0.55. С помощью опций enable/disable вы можете изменить «умолчательный» состав модулей, которые будут собраны в основном двоичном файле.

4. Наконец, традиционная сборка и инсталляция:

make
sudo make install #

или

su -c ‘make install’

в дистрибутивах, отличных от Ubuntu

Настройка

К сожалению, разработчики дистрибутивов пока не пришли к единому мнению на счет того, как же лучше именовать те или иные файлы. В «чистом» пакете, скачанном с http://Apache.org, предполагается, что основной двоичный файл именуется httpd, главный файл конфигурации – httpd.conf, а утилита управления - Apachectl. То есть так, как это принято и в версиях 1.х.

Однако в некоторых дистрибутивах применяют несколько иные схемы. Например, Ubuntu, Knoppix (да, похоже, и все семейство Debian) размещают конфигурацию в /etc/Apache2, а главный файл конфигурации называется Apache2.conf. Файл httpd.conf тоже присутствует, но используется в основном для обратной совместимости. А, скажем, Fedora Core придерживается на сей счет более «официальной» точки зрения, и размещает основной файл настройки в /etc/httpd/conf/httpd.conf, с той лишь разницей, что часть вспомогательных настроек вынесена в отдельные файлы в каталоге conf.d.

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

Итак, заглянув в Apache2.conf, вы увидите там несколько видов строк:

  • начинающиеся с символа «#» - это комментарии, они игнорируются при анализе файла и служат лишь для пояснения нижележащих опций;
  • начинающиеся с «<» - это синтаксические конструкции, разделяющие конфигурационный файл на так называемые секции;
  • обычные директивы вида «имя значение».

Секции тоже можно условно разделить на два типа: «ограничители» и «условия». Первые ограничивают область действия заключенных в них директив. Например, секция <Directory /var/www/special> будет влиять только на запросы файлов, размещенных в указанном каталоге. Секция <Location /server-status> будет отвечать за запросы ресурса с URL вида http://yourserver.ru/server-status/... Секция <Limit GET> окажет влияние только на GET-запросы. К этому же виду секций можно отнести и виртуальные хосты, с которыми мы познакомимся чуть позже.

Секции-условия позволяют применять те или иные директивы только в том случае, если выполняется некоторое условие, например, если подключен конкретный модуль: <IfModule prefork.c>. Причем влияют эти директивы на конфигурацию всего сервера (или той секции-ограничителя, в которую вложена данная секция-условие).

Директивы отвечают за самые различные аспекты поведения web-сервера – от прослушиваемых портов до подключения модулей и обработчиков (handlers). Обращайте особое внимание на директивы Include, которые позволяют вставлять в текущий файл настройки строки из других файлов (особенно этим «грешит» Ubuntu). Другие важные для нас директивы будут рассмотрены по ходу дальнейшего изложения.

Первая страничка

Перейдем к практике. Apache мы поставили и даже можем увидеть его тестовую страницу, если введем в браузере http://yourdomain.ru (если вы ставите сервер на той же машине, на которой работаете, то можно ввести http://localhost). Опять-таки, в зависимости от дистрибутива, это может быть либо страничка с «перышком», либо оглавление каталога (как в Ubuntu), либо просто строчка «It works!» (как в официальном пакете). Давайте посмотрим, откуда она берется.

В конфигурационном файле отыщите строку DocumentRoot - она укажет вам на каталог, который Apache считает корневым для сайта. В зависимости от дистрибутива и способа инсталляции это может быть /var/www, $prefix/htdocs (где $prefix - каталог, куда выполнялась установка), /var/www/html. В нем вы должны найти файл с именем index.html. Если вы вернетесь к конфигурации и найдете строку DirectoryIndex, то убедитесь, что файл с таким именем и должен возвращаться на запрос, в котором конкретное имя ресурса не указано. Таким образом, чтобы вместо этой открывался ваш html-файл, просто замените им индексный (главное, чтобы он был доступен для чтения пользователю www-data, с правами которого обычно работает Apache). Впрочем, никто не запретит вам указать здесь свой каталог.

Автоиндекс

А что Apache будет делать, если в каталоге отсутствует индексный файл? Это также зависит от настроек. По умолчанию сервер собирается с поддержкой модуля mod_autoindex (для проверки выполните команду Apache2 -l или httpd -l, в зависимости от имени исполняемого файла в вашем дистрибутиве), так что Apache, используя его возможности, автоматически построит страничку-оглавление со ссылками на все файлы, содержащиеся в запрошенном каталоге. С помощью директивы IndexOptions можно подстраивать вид этой страницы.

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

Options -Indexes

Кстати говоря, директива Options очень важна и для других аспектов безопасности. Обязательно ознакомьтесь с ней подробнее в документации. После изменения конфигурации не забудьте перезагрузить сервер: Apachectl restart (в некоторых дистрибутивах эта утилита называется Apache2ctl).

Домашние страницы

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

Для решения этой задачи предназначен модуль mod_userdir. Если он подключен, то вы можете указать в конфигурации такой фрагмент (скорее всего, он там уже есть, но закомментирован):

UserDir public_html
<Directory /home/*/public_html>
    Options Indexes
    AllowOverride Indexes
</Directory>

Здесь мы указываем, что при получении запроса вида http://yourserver.ru/~vasya нужно открывать индексный файл из домашнего каталога пользователя vasya, т.е. из /home/vasya/public_html. Ну а там Вася пусть делает все, что ему захочется. Чтобы он не сильно шалил, его возможности можно ограничить в последующей секции <Directory> для каталогов, соответствующих указанной маске (в примере мы устанавливаем ему опцию Indexes и позволяем ее переопределять самому). Кстати, о переопределении конфигурации...

Файл .htaccess

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

Apache позволяет управлять параметрами доступа к каталогам более гибко - путем размещения в них специальных файлов, обычно с именем .htaccess. Если для данного каталога действует опция AllowOverride All, то в .htaccess-файле можно указывать практически любые опции, допустимые для секции <Directory>. Однако администратор может ограничить эти возможности, задав более жесткие ограничения, как в примере выше.

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

Виртуальные хосты

Домашние странички пользователей достаточно удобны для задач «домашнего» уровня. Но Apache предоставляет более мощное средство размещения нескольких сайтов на одном сервере (и под одним IP-адресом) - виртуальный хостинг. Рассмотрим простейший пример:

NameVirtualHost 127.0.0.1
<VirtualHost localhost>
  DocumentRoot /var/www/localhost
</VirtualHost>
<VirtualHost toshiba>
  DocumentRoot /var/www/toshiba
</VirtualHost>

Здесь мы указали, что у нас будут виртуальные хосты по адресу 127.0.0.1, и дальше перечисляем секции <VirtualHost> для каждого доменного имени. В этих секциях обязательно нужно указать корень сайта (DocumentRoot) и, при желании, любые другие настройки. Разместив в указанных каталогах индексные файлы с различным содержанием, вы получите два сайта, открывающиеся в зависимости от того, какое доменное имя будет указано в запросе.

Чтобы виртуальный хостинг работал правильно, все доменные имена должны быть описаны на сервере DNS (для тестирования будет достаточно файла /etc/hosts), а браузер клиента должен поддерживать протокол HTTP/1.1, так как HTTP/1.0 не поддерживает поле Host: заголовка, в котором и передается имя домена. А поскольку запрос направляется по IP-адресу, то для Apache это поле - единственный способ узнать, какой же из сайтов запрашивается клиентом.

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

Персональные инструменты
купить
подписаться
Яндекс.Метрика