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

LXF84:Apache

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(викификация, оформление)
 

Текущая версия на 14:34, 29 января 2009

Новая серия! 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

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