Apache HTTP Server
| Apache HTTP Server | |||
|---|---|---|---|
Логотип Apache | |||
| Тип | серверное программное обеспечение и проект Фонда Apache[вд] | ||
| Разработчик | Apache Software Foundation[3] | ||
| Написана на | Си[4][5][…] | ||
| Операционные системы | Windows и Unix-подобная операционная система | ||
| Языки интерфейса | английский | ||
| Дата выпуска | 1995 | ||
| Последняя версия | |||
| Репозиторий | github.com/apache/httpd | ||
| |||
| Лицензия | Apache License 2.0[6] | ||
| Сайт | httpd.apache.org (англ.) | ||
Apache HTTP-сервер —свободныйвеб-сервер.
Apache являетсякроссплатформенным ПО, поддерживает операционные системыLinux,BSD,macOS,Microsoft Windows,Novell NetWare,BeOS.
Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использоватьСУБД дляаутентификации пользователей, модифицировать сообщения об ошибках и т. д.
История
[править |править код]Сервер был написан в начале1995 года и считается, что его имя восходит к шуточному названию «a patchy [server]» (с англ. — «в заплатках»), так как он устранял ошибки популярного тогда сервераNCSA HTTPd 1.3. В дальнейшем, с версии 2.х, сервер был переписан заново и теперь не содержит кодаNCSA. На данный момент разработка ведётся в ветке 2.4, а в версиях 1.3, 2.0 и 2.2 производятся лишь исправления ошибок безопасности. На текущий момент последняя версия ветки 2.4 — 2.4.62 (17 июля 2024), для первой версии это 1.3.42.
Веб-сервер Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидойApache Software Foundation и включён во многиепрограммные продукты, среди которыхСУБД Oracle иIBMWebSphere.
С апреля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.
См. также
[править |править код]- LAMP — комплект из Linux, Apache, MySQL, PHP и пр.
- WAMP — комплект из Windows, Apache, MySQL, PHP и пр.
- MAMP — комплект из Mac OS, Apache, MySQL, PHP и пр.
- XAMPP
Примечания
[править |править код]- ↑[ANNOUNCEMENT Apache HTTP Server 2.4.66 Released] — 2025.
- ↑https://httpd.apache.org/docs/current/programs/htpasswd.html
- ↑http://www.apache.org/foundation/
- ↑http://linuxdocs.org/HOWTOs/Apache-Overview-HOWTO-12.html
- ↑https://github.com/apache/httpd
- ↑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 (англ.). Архивировано 12 июня 2016 года.
- ↑Статистика российского интернета runfo.ru (рус.). www.runfo.ru. Дата обращения: 16 февраля 2017. Архивировано 17 февраля 2017 года.
- ↑Apache Module RegistryАрхивная копия от 3 февраля 2010 наWayback Machine (англ.)
- ↑Apache::ASPАрхивная копия от 15 ноября 2011 наWayback Machine (англ.)
- ↑Rivet — Webscripting for Tcl’ers . Дата обращения: 6 октября 2011. Архивировано 27 сентября 2011 года.
Литература
[править |править код]- Скотт Хокинс. Администрирование веб-сервера 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/ (англ.)