Apache HTTP Server
Apache HTTP-сервер (является искажённым сокращением от англ. a patchy server; среди русских пользователей общепринято переводное апа́ч) — свободный веб-сервер.
Apache HTTP Server | |
---|---|
| |
Тип | веб-сервер и серверное программное обеспечение |
Автор | Robert McCool[d] |
Разработчик | Apache Software Foundation[1] |
Написана на | Си[2][3][4][…] |
Операционная система | Microsoft Windows и UNIX-подобные операционные системы |
Языки интерфейса | английский |
Первый выпуск | 1995 |
Последняя версия |
|
Лицензия | Apache License 2.0[6] |
Сайт | httpd.apache.org (англ.) |
Медиафайлы на Викискладе |
Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv4.
История
Сервер был написан в начале 1995 года и считается, что его имя восходит к шуточному названию «a patchy [server]» (с англ. — «в заплатках»), так как он устранял ошибки популярного тогда сервера Всемирной паутины NCSA HTTPd 1.3. В дальнейшем, с версии 2.х, сервер был переписан заново и теперь не содержит кода NCSA. На данный момент разработка ведётся в ветке 2.4, а в версиях 1.3, 2.0 и 2.2 производятся лишь исправления ошибок безопасности. На текущий момент последняя версия ветки 2.4 — 2.4.46 (5 августа 2020), для первой версии это 1.3.42.
Веб-сервер Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидой Apache Software Foundation и включён во многие программные продукты, среди которых СУБД Oracle и IBM WebSphere.
С апреля 1996 и до настоящего времени является самым популярным HTTP-сервером в Интернете. Статистика Netcraft показывает следующие данные об использовании Apache:
- в августе 2007 года он работал на 51 % всех веб-серверов[7]
- в мае 2009 года — на 46 %[8]
- в январе 2011 года — на 59 %, то есть более чем на 160 млн сайтов[9]
- в январе 2016 года — на 33,56 %, то есть более чем на 304 млн сайтов[10].
Apache имеет долю рынка в России до 17,45 %. Это самый популярный веб-сервер после NGINX с долей рынка 64,89 %[11].
Архитектура
Ядро
Ядро Apache включает в себя основные функциональные возможности, такие как обработка конфигурационных файлов, протокол HTTP и система загрузки модулей. Ядро (в отличие от модулей) полностью разрабатывается Apache Software Foundation, без участия сторонних программистов.
Теоретически ядро apache может функционировать в чистом виде, без использования модулей. Однако функциональность такого решения крайне ограничена.
Ядро Apache полностью написано на языке программирования C.
Система конфигурации
Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации:
- Конфигурация сервера (httpd.conf). Директивы конфигурации сгруппированы в три основных раздела:
- директивы, управляющие процессом Apache в целом (глобальное окружение);
- директивы, определяющие параметры «главного» сервера, или сервера «по умолчанию», который отвечает на запросы, которые не обрабатываются виртуальными хостами (определяют также установки по умолчанию для всех остальных виртуальных хостов);
- установки для виртуальных хостов, позволяющие обрабатывать запросы Web одним-единственным сервером Apache, но направлять по раздельным адресам IP или именам хостов.
- Конфигурация виртуального хоста (httpd.conf c версии 2.2, extra/httpd-vhosts.conf).
- Конфигурация уровня каталога (.htaccess).
Имеет собственный язык конфигурационных файлов, основанный на блоках директив. Практически все параметры ядра могут быть изменены через конфигурационные файлы, вплоть до управления MPM. Большая часть модулей имеет собственные параметры.
Часть модулей использует в своей работе конфигурационные файлы операционной системы (например /etc/passwd и /etc/hosts).
Помимо этого, параметры могут быть заданы через ключи командной строки.
Многопроцессорные модели (MPM)
Для веб-сервера Apache существует множество моделей симметричной многопроцессорности. Вот основные из них:
Название | Разработчик | Поддержи-ваемые OS | Описание | Назначение | Статус |
---|---|---|---|---|---|
worker | Apache Software Foundation | Linux, FreeBSD | Гибридная многопроцессорно-многопоточная модель. Сохраняя стабильность многопроцессорных решений, она позволяет обслуживать большое число клиентов с минимальным использованием ресурсов. | Среднезагруженные веб-серверы. | Стабильный. |
pre-fork | Apache Software Foundation | Linux, FreeBSD | MPM, основанная на предварительном создании отдельных процессов, не использующая механизм threads. | Большая безопасность и стабильность за счёт изоляции процессов друг от друга, сохранение совместимости со старыми библиотеками, не поддерживающими threads. | Стабильный. |
perchild | Apache Software Foundation | Linux | Гибридная модель, с фиксированным количеством процессов. | Высоконагруженные серверы, возможность запуска дочерних процессов используя другое имя пользователя для повышения безопасности. | В разработке, нестабильный. |
netware | Apache Software Foundation | Novell NetWare | Многопоточная модель, оптимизированная для работы в среде NetWare. | Серверы Novell NetWare | Стабильный. |
winnt | Apache Software Foundation | Microsoft Windows | Многопоточная модель, созданная для операционной системы Microsoft Windows. | Серверы под управлением Windows Server. | Стабильный. |
Apache-ITK | Steinar H. Gunderson | Linux, FreeBSD | MPM, основанная на модели prefork. Позволяет запуск каждого виртуального хоста под отдельными uid и gid. | Хостинговые серверы, серверы, критичные к изоляции пользователей и учёту ресурсов. | Стабильный. |
peruser | Sean Gabriel Heacock | Linux, FreeBSD | Модель, созданная на базе MPM perchild. Позволяет запуск каждого виртуального хоста под отдельными uid и gid. Не использует потоки. | Обеспечение повышенной безопасности, работа с библиотеками, не поддерживающими threads. | Стабильная версия от 4 октября 2007 года, экспериментальная — от 10 сентября 2009 года. |
event | Apache Software Foundation | Linux, FreeBSD | Модель использует threads и thread-safe polling основана на worker. предназначен для одновременного обслуживания большего количества запросов путем передачи некоторой обработки в потоки слушателей, освобождая рабочие потоки для обслуживания новых запросов. | Обеспечение повышенной производительности. не очень хорошо работает на старых платформах, в которых отсутствует хорошая многопоточность, но требование EPoll или KQueue делает это спорным. | Стабильный. |
Система модулей
Apache HTTP Server поддерживает модульность. Существует более 500 модулей[12], выполняющих различные функции. Часть из них разрабатывается командой Apache Software Foundation, но основное количество — отдельными open source-разработчиками.
Модули могут быть как включены в состав сервера в момент компиляции, так и загружены динамически, через директивы конфигурационного файла.
В модулях реализуются такие вещи, как:
- Поддержка языков программирования.
- Добавление функций.
- Исправление ошибок или модификация основных функций.
- Усиление безопасности.
Часть веб-приложений, например панели управления ISPmanager и VDSmanager реализованы в виде модуля Apache.
Механизм виртуальных хостов
Apache имеет встроенный механизм виртуальных хостов. Он позволяет полноценно обслуживать на одном IP-адресе множество сайтов (доменных имён), отображая для каждого из них собственное содержимое.
Для каждого виртуального хоста можно указать собственные настройки ядра и модулей, ограничить доступ ко всему сайту или отдельным файлам. Некоторые MPM, например Apache-ITK, позволяют запускать процесс httpd для каждого виртуального хоста с отдельными идентификаторами uid и guid.
Также существуют модули, позволяющие учитывать и ограничивать ресурсы сервера (CPU, RAM, трафик) для каждого виртуального хоста.
Функциональные возможности
Интеграция с другим ПО и языками программирования
Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.
К ним относятся:
- PHP (mod_php).
- Python (mod python, mod wsgi).
- Ruby (apache-ruby).
- Perl (mod perl).
- ASP (apache-asp)[13].
- Tcl (rivet[14])
Кроме того, Apache поддерживает механизмы CGI и FastCGI, что позволяет исполнять программы на практически всех языках программирования, в том числе C, C++, Lua, sh, Java.
Безопасность
Apache имеет различные механизмы обеспечения безопасности и разграничения доступа к данным. Основными являются:
- Ограничение доступа к определённым каталогам или файлам.
- Механизм авторизации пользователей для доступа к каталогу на основе HTTP-аутентификации (mod_auth_basic) и digest-аутентификации (mod_auth_digest).
- Ограничение доступа к определённым каталогам или всему серверу, основанное на IP-адресах пользователей.
- Запрет доступа к определённым типам файлов для всех или части пользователей, например запрет доступа к конфигурационным файлам и файлам баз данных.
- Существуют модули, реализующие авторизацию через СУБД или PAM.
В некоторых MPM-модулях присутствует возможность запуска каждого процесса Apache, используя различные uid и gid с соответствующими этим пользователям и группам пользователей.
Также существует механизм suexec, используемый для запуска скриптов и CGI-приложений с правами и идентификационными данными пользователя.
Для реализации шифрования данных, передающихся между клиентом и сервером, используется механизм SSL, реализованный через библиотеку OpenSSL. Для удостоверения подлинности веб-сервера используются сертификаты X.509.
Существуют внешние средства обеспечения безопасности, например mod_security.
Интернационализация
Начиная с версии 2.0 появилась возможность определения сервером локали пользователя. Сообщения об ошибках и событиях, посылаемые браузеру, теперь представлены на нескольких языках и используют SSI-технологию.
Также, можно реализовать средствами сервера отображение различных страниц для пользователей с различными локалями. Apache поддерживает множество кодировок, в том числе Unicode, что позволяет использовать страницы, созданные в любых кодировках и на любых языках.
Обработка событий
Администратор может установить собственные страницы и обработчики для всех HTTP-ошибок и событий, таких как 404 (Not Found) или 403 (Forbidden). В том числе существует возможность запуска скриптов и отображения сообщений на разных языках.
Server Side Includes
В версиях 1.3 и старше был реализован механизм Server Side Includes, позволяющий динамически формировать HTML-документы на стороне сервера.
Управлением SSI занимается модуль mod_include, включённый в базовую поставку Apache.
См. также
Примечания
- http://www.apache.org/foundation/
- http://linuxdocs.org/HOWTOs/Apache-Overview-HOWTO-12.html
- https://github.com/apache/httpd
- The apache Open Source Project on Open Hub: Languages Page — 2006.
- Changes with Apache 2.4.52
- https://httpd.apache.org/docs/trunk/license.html
- Web Server Survey — August 2007 (англ.) (недоступная ссылка). Netcraft (август 2007). Дата обращения: 21 июня 2009. Архивировано 7 февраля 2009 года.
- Web Server Survey — May 2009 (англ.) (недоступная ссылка). Netcraft (май 2009). Дата обращения: 21 июня 2009. Архивировано 30 мая 2009 года.
- January 2011 Web Server Survey (англ.) (недоступная ссылка). Дата обращения: 14 января 2011. Архивировано 16 января 2011 года.
- January 2016 Web Server Survey (англ.).
- Статистика российского интернета runfo.ru . www.runfo.ru. Дата обращения: 16 февраля 2017.
- Apache Module Registry Архивная копия от 3 февраля 2010 на Wayback Machine (англ.)
- Apache::ASP (англ.)
- Rivet — Webscripting for Tcl’ers
Литература
- Скотт Хокинс. Администрирование веб-сервера Apache и руководство по электронной коммерции = Apache Web Server Administration and e-Commerce Handbook. — М.: Вильямс, 2001. — 336 с. — ISBN 0-13-089873-2.
Ссылки
- Официальный сайт (англ.)
- Apache HTTP Server Wiki (англ.)
- Архитектура Apache. Проект The Apache Modeling Project (октябрь 2003) (рус.); оригинал на сайте apache.hpi.uni-potsdam.de/ (англ.)