Apache HTTP Server

**Apache HTTP Server** -это кроссплатформенное веб-серверное программное обеспечение с открытым исходным кодом, выпущенное на условиях лицензии Apache 2.0. Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидой Apache SoftwareФонд.[1]

Подавляющее большинство экземпляров Apache HTTP Server работают на дистрибутиве Linux, но текущие версии также работают на Microsoft Windows, OpenVMS, и широком спектре Unix-подобных систем. Предыдущие версии также работали на NetWare, OS/2 и других операционных системах, включая порты для мэйнфреймов.

Первоначально основанный на сервере NCSA HTTPd, разработка Apache началась в начале 1995 года после того, как работа над кодом NCSA застопорилась. Apache сыграл ключевую роль в первоначальном росте Всемирной паутины, быстро обогнав NCSA HTTPd в качестве доминирующего HTTP-сервера. В 2009 году он стал первым веб-сервером, обслуживающим более 100 миллионов веб

По состоянию на январь 2021, по оценкам Netcraft, Apache обслуживал 24,63% из миллиона самых загруженных сайтов, в то время как Nginx обслуживал 23,21%, а Microsoft находится на третьем месте с показателем 6,85% (по некоторым другим показателям Netcraft Nginx опережает Apache), в то время как, согласно W3Techs, Apache находится на третьем месте.на первом месте - 35,0%, на втором - Nginx - 33,0%, на третьем - Cloudflare Server - 17,3%

## Функциональные возможности

### Интеграция с другим ПО и языками программирования

Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.

К ним относятся:

- PHP (mod_php).
- Python (mod python, mod wsgi).
- Ruby (apache-ruby).
- Perl (mod perl).
- ASP (apache-asp).
- Tcl (rivet)

Кроме того, 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.