Web-сервер Apache для систем Linux

Максим Афанасьев

Проект web-сервера Apache берет свое начало от сервера httpd. Пакет httpd был разработан Робом Макколом в Национальном центре по применению суперкомпьютеров (National Center for supercomputing, NCSA) в США. К 1995 году сервер httpd представлял собой один из самых популярных проектов по разработке web-серверов. Однако в том же году разработчик покинул NCSA и дальнейшее развитие проекта заморозилось. Тогда небольшая группа высококвалифицированных web-администраторов занялась последующей поддержкой, модернизацией и развитием данного проекта. В дальнейшем эта группа администраторов собрала вокруг себя единомышленников и стала ядром команды, которая впоследствии получила название Apache Group Incorporated. В 1995 году она разработала обновления для пакета httpd 1.3 и в конечном счете выпустила очередную версию сервера под названием Apache 0.6.2. С тех пор эта группа всецело посвятила себя модернизации и совершенствованию данного сервера. С 1996 года этот проект является одним из самых популярных в мире.

В настоящее время существует три версии этого web-сервера, которые развиваются независимо друг от друга.

 

Версия 1.3.х

Серверы, которые маркируются этой версией, отличаются стабильной работой, многочисленными «заплатками» в системе безопасности и имеют в своей основе первоначальный движок, разработанный еще в те далекие времена. Основным их отличием от других параллельных разработок является отсутствие многочисленных дополнительных модулей, а также поддержки в их разработке. То есть это web-сервер, лишенный всяческих излишеств, — при поддержке большинства технологий он остается компактным и быстрым в работе. Единственный его недостаток — это отсутствие поддержки IPv6 и многопроцессорности (потоков стандарта POSIX). В большинстве случаев эта версия сервера Apache используется только на UNIX-подобных системах, так как правильной оптимизации для других систем в данном пакете не предусмотрено. На текущий момент самой последней версией из этой линейки является Apache 1.3.39.

 

Версия 2.0.х

Пакеты Apache этой версии поддерживают практически все новейшие технологии. Движок web-сервера был полностью переписан, и практически все модули к нему также подверг­лись кардинальным изменениям. Эта ветвь Apache хотя и развивается отдельно от версии 2.2.х, но почти не отличается от нее, за исключением того, что в ней отсутствует большинство дополнительных модулей. Ядро пакета не только предполагает использование web-сервера в операционных системах UNIX, но и обеспечивает его быструю и эффективную работу с операционными системами BeOS, Windows и др. Все последние обновления по безопасности к этому web-серверу совмещены в версии 2.0.61.

 

Версия 2.2.х

Данная версия является самой продвинутой по сравнению с остальными. Пакеты этого типа сочетают в себе достоинства нового ядра 2.0 и дополнительных модулей, которые существенно расширяют возможности web-сервера. Отдельно стоит отметить полноценную поддержку протокола IPv6, мультипотоков, наличие большого количества модулей и простоту их разработки. В настоящий момент большинство дистрибутивов операционных систем на базе UNIX, содержат в себе пакет Apache именно этой версии. Последний релиз данного пакета — Apache 2.2.6.

Все вышеперечисленные версии доступны для загрузки на сайте разработчиков httpd.apache.org. Там же можно найти необходимые и дополнительные модули для web-сервера, в создании которых принимали участие не только главные разработчики, но и сторонние люди. Стоит отметить, что модули, написанные для версии 1.3.х, не будут работать для версий 2.0.х и 2.2.х, и наоборот, то есть каждая из версий предполагает использование только написанных для нее плагинов.

 

Установка

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

Прежде чем начать компиляцию, необходимо запустить файл для автоматической конфигурации пакета перед сборкой. Сделать это можно, разархивировав исходный код в отдельную папку и, находясь в ней, запустив файл ./configure. Данный скрипт автоматически определит настройки системы и сообщит о необходимых библиотеках, если таковые требуются для установки. Также при запуске этого скрипта можно указать специальные настройки: исключить/добавить модули, указать папку для установки или имя пользователя, для которого этот сервис будет установлен. Более подробную информацию о возможных командах для скрипта можно почерпнуть на сайте разработчиков или в файле install, который находится в корне архива с исходным кодом. После конфигурирования пакета необходимо его скомпилировать командой make и установить make install. По умолчанию в системах Linux web-сервер устанавливается в папку /usr/. Исполняемый файл находится в папке /usr/sbin, а кроме того, он может быть запущен обычной командой httpd из командной строки. После установки все необходимые конфигурационные файлы будут перенесены в папку /etc/httpd/conf и /etc/httpd/conf.d, основным конфигурационным файлом сервера является файл httpd.conf, который содержит в себе все главные настройки. Поскольку httpd является, по сути, основным web-сервером для платформ Linux, он максимально интегрируется в систему при установке. По умолчанию он автоматически добавляется в системные сервисы, позволяя таким образом управлять ими через стандартную программную оболочку сервисов; подробнее о доступных командах можно узнать, набрав в командной строке service httpd.

 

Настройка

Установленный web-сервер готов к работе, и при наборе IP-адреса сервера должна отображаться стандартная страница приветствия. Она появляется в том случае, если в каталоге со страницами (папка по умолчанию /var/www/html) нет файлов index.htm, index.html или index.php. Следует понимать, что установка одного web-сервера не предполагает одновременной установки базы данных или отличных от CGI языков web-программирования. Такие пакеты, как PHP, MySQL и Perl (для работы скриптов CGI), устанавливаются отдельно и затем подключаются через конфигурационный файл httpd.conf и дополнительные модули. В версию 2.2.6 уже включены все библиотеки, необходимые для работы с этими сторонними приложениями.

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

В конфигурационном файле httpd.conf по умолчанию определены настройки web-сервера на максимальную производительность, при запуске сервиса автоматически запускаются до шести псевдопроцессов, которые отвечают за обработку данных. Такая конфигурация рассчитана на высокую нагрузку и большое количество клиентов сервера. Если web-сервер предназначен для небольшого сайта, состоящего из статических страниц html, а также не использует базу данных и большие объемы данных, подобные настройки не нужны. Для того чтобы уменьшить нагрузку на сервер (компьютер на котором установлен Apache), необходимо в конфигурационном файле httpd.conf отредактировать настройки MPM:

 

<IfModule prefork.c>

StartServers      2

MinSpareServers   2

MaxSpareServers  20

ServerLimit     256

MaxClients      256

MaxRequestsPerChild 4000

</IfModule>

<IfModule worker.c>

StartServers        2

MaxClients        150

MinSpareThreads    25

MaxSpareThreads    75

ThreadsPerChild    25

MaxRequestsPerChild 0

</IfModule>

 

Таким образом, число запущенных псевдопроцессов web-сервера уменьшится.

В некоторых случаях можно запустить сервер на отличном от стандартного (80) порту или точно определить интерфейс (IP-адрес), на котором Apache должен прослушивать входящие соединения от клиентов. Для этого в конфигурационном файле существует директива Listen. Стандартно она определена как Listen 80, то есть web-сервер прослушивает все доступные интерфейсы и находится на 80-м порту в системе. Чтобы задать определенный IP-адрес, необходимо прописать директиву в таком ключе:

 

Listen 192.168.192.1:80

 

При необходимости порт также можно изменить, например на 8080. Тут стоит обратить внимание, что директива Listen отвечает за глобальную настройку сервера. Для создания виртуальных подсерверов, которые будут соответствовать конкретным доменам или IP-адресам, необходимо использовать директиву VirtualHost, которая описана далее.

Чтобы задать корневую папку сервера, используется директива DocumentRoot. Практически всегда стандартно она определена как:

 

DocumentRoot “/var/www/html”

 

По умолчанию настройки конфигурационного файла подразумевают доступ любого пользователя ко всем папкам на сервере, то есть если существует папка /var/www/html/user1, то через браузер пользователь может зайти в нее и увидеть/скачать все файлы, находящиеся в ней (при отсутствии файлов index.html, index.htm, index.php и подобных). Во многих случаях это небезопасно. Для защиты данных сервера необходимо подправить настройки директивы <Directory “/var/www/html”>, которая определяет доступные опции. В ней вместо строки Options FollowSymLinks необходимо прописать следующую строку:

 

Options -Indexes FollowSymLinks

 

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

 

<Directory “var/www/html/upload”>

Options +Indexes

AllowOverride None

Order allow,deny

Allow from 192.168.192.44

Allow from 192.168.192.33

</Directory>

 

В конкретном примере доступ к папке uploads будет определен только для клиентов с IP-адресами 192.168.192.44 и 192.168.192.33. Для того чтобы разрешить доступ всем клиентам к этой папке, необходимо прописать вместо IP-адреса слово All. Для запрета доступа пользователей к файлам определенного типа необходимо воспользоваться параметром <Files>. Примером запрета может служить запрет на доступ к файлам .htaccess и .htpasswd:

 

<Files ~ “^\.ht”>

Order allow,deny

Deny from all

</Files>

 

Файлы .htaccess и .htpasswd тоже могут определять настройки конкретной папки, а также доступ к ней по логину и паролю. Стоит отметить, что если файл .htaccess расположен в корневой директории web-сервера, его действие распространяется на весь сервер. Именно для этого доступ к ним закрыт по умолчанию.

Так, для приведенного выше примера с папкой uploads можно просто поместить в эту директорию файл .htaccess, содержащий такие же строки:

 

Options +Indexes

AllowOverride None

Order allow,deny

Allow from 192.168.192.44

Allow from 192.168.192.33

 

Таким образом можно избежать увеличения объема файла httpd.conf, ведь по сути .htaccess просто позволяет дополнить настройки главного файла. С более подробными настройками и возможностями файла .htaccess можно ознакомиться в документации или на сайте «Википедии» (http://ru.wiki­pe­dia.org/wiki/.htaccess).

Одним из самых распространенных способов использования .htaccess является работа с функциями redirect и rewrite, которые позволяют перенаправлять пользователя на определенные правилом страницы в зависимости от запрашиваемой пользователем страницы или файла.

Файл .htpasswd содержит пароли для доступа к ресурсу у веб-сервера Apache и совместимых с ним (это стандарт практически для всех подобных систем). Название файла начинается с точки, поскольку точка в UNIX-подобных операционных системах указывает на атрибут «скрытый». Файл состоит из строк, каждая строка соответствует паре логин/хеш пароля. Логин отделяется от хеша двоеточием. Вместо пароля в файле сохраняется MD5-сумма пароля, для генерации данных для .htpasswd используется утилита htpasswd, запускаемая из командной строки. Этот файл предусматривает ограничение только на чтение; если при доступе к веб-страницам производится запись, то возможность записи контролируется правами на файл в файловой системе. Нельзя не упомянуть, что простое помещение файла .htpasswd в каталог ничего не даст. Для процесса авторизации необходимо создать файл .htaccess, содержащий примерно такие строки:

 

AuthName “Заголовок”

AuthType Basic

require <valid-user | user <username1> [username2] ... [usernameN]>

AuthUserFile “/var/www/html/uploads/.htpasswd”

 

Для определения постоянной кодировки web-сервера Apache используется параметр AddDefaultCharset. Для корректной работы Windows-клиентов, которые применяют кодировку windows-1251, необходимо прописать этот параметр в виде:

AddDefaultCharset windows-1251

По умолчанию web-сервер работает со стандартной кодировкой UTF-8, что часто вызывает проблемы у браузеров, работающих под операционной системой семейства Windows.

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

 

#LoadModule proxy_module modules/mod_proxy.so

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

#LoadModule proxy_http_module modules/mod_proxy_http.so

#LoadModule proxy_connect_module modules/mod_proxy_connect.so

А также проверить закомментированы ли строки:

#<IfModule mod_proxy.c>

#ProxyRequests On

#

#<Proxy *>

#   Order deny,allow

#   Deny from all

#   Allow from .example.com

#</Proxy>

 

Хотя в данной директиве (<IfModule mod_proxy.c>) и описывается доступ пользователей к этой функции, в Apache версии 2.2.2 был баг в системе защиты, что позволяет обходить эти параметры, поэтому модуль прокси лучше отключить. К тому же web-сервер Apache одним из первых стал поддерживать создание нескольких виртуальных серверов на одном компьютере. Для описания настроек каждого из серверов предназначена директива <VirtualHost>. С ее помощью можно задавать опции работы виртуального сервера. Простой пример применения этого параметра:

 

<VirtualHost *:80>

ServerAdmin webmaster@spiker.ru

DocumentRoot /var/www/html

ServerName www.spiker.ru

ErrorLog logs/error_log

TransferLog logs/access_log

ServerAlias spiker.ru www.spiker.ru

</VirtualHost>

<VirtualHost *:80>

ServerAdmin webmaster@spiker.net

DocumentRoot /var/www/html/spiker2

ServerName ftp.spiker.ru

ErrorLog logs/ftp.spiker.ru-error_log

TransferLog logs/ftp.spiker.ru-access_log

ServerAlias 192.168.192.1 spiker.net www.spiker.net ftp.spiker.net

</VirtualHost>

 

Компьютеру присвоены два доменных имени: www.spiker.net и www.spiker.ru. Хотя внешний IP-адрес одинаков, порт обращения может различаться. Без виртуальных серверов по любому из доменных имен будет доступен один и тот же сайт. Виртуальные серверы используются для разграничения доступа пользователей в зависимости от доменного имени, к которому обращаются. Параметры DocumentRoot описывают папку, к которой получают доступ пользователи при обращении к одному из доменных имен. Для каждого из серверов возможно отдельно вести протоколирование ошибок и запросов, что облегчает обработку конечных данных для каждого их них. Опция ServerAlias обеспечивает создание символической ссылки на виртуальный web-сервер в зависимости от доменного имени или IP-адреса. При этом доменные имена третьего уровня и ниже должны быть прописаны на DNS-сервере, к которому относится сам компьютер с установленным пакетом Apache. Если доменное имя не записано в DNS, виртуальный сервер работать не будет.

Для решения возможных проблем с доступом к страницам сайта или к серверу в web-сервере Apache предусмотрено полное протоколирование действий пользователя и отслеживание ошибок системы. Все возможные ошибки пишут в файл, который задается параметром ErrorLog. Существует несколько типов протоколирования: debug, info, notice, error, crit, warn, alert и emerg. При необходимости каждый из них предполагает вывод в файл конкретных ошибок. Наиболее полная информация выводится, если параметр LogLevel установлен в режим debug. Файл для записи действий пользователя на сайте (доступ к файлам, перенаправление и т.п.) описывается директивой CustomLog. Все доступные параметры записываются при добавлении значения combined.

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

 

В начало В начало

КомпьютерПресс 10'2007

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует