
Если коротко, что такое Apache: это бесплатный веб-сервер с открытым кодом (полное название Apache HTTP Server), который принимает HTTP-запросы браузеров и возвращает страницы, файлы и результаты работы PHP или другого бэкенда. Его развивает фонд Apache Software Foundation, работает он на Linux, Windows и macOS и обслуживает огромное число сайтов.
Что такое Apache простыми словами
Браузер просит: «дай /catalog/index.php с сайта example.ru». Apache понимает, к какому сайту относится запрос, находит файл на диске, при необходимости передаёт его интерпретатору PHP и возвращает ответ с кодом состояния — 200, 301, 404 и так далее. Работает по HTTP, а с модулем mod_ssl — по HTTPS.
По-русски название часто пишут «апач» или «апачи», в поиске встречается и опечатка apatch — речь в любом случае об одном и том же сервере. Исполняемый файл называется httpd (в Debian и Ubuntu — apache2), поэтому в документации и конфигурации встречаются оба имени.
Путаницу добавляет то, что Apache — это ещё и название организации. Apache Software Foundation (сайт apache.org) курирует сотни проектов: Kafka, Spark, Superset, Airflow, Tomcat и другие. К веб-серверу они отношения не имеют, кроме общего «зонтика». Отдельно стоит лицензия Apache 2.0 — это разрешительная open-source лицензия фонда, под которой выпускают и чужие проекты; сам веб-сервер распространяется под ней же. Велосипеды, часы и вертолёт AH-64 с этим именем — другая история.
Актуальная ветка сервера — 2.4. Ветка 2.2 давно не поддерживается: увидели Apache/2.2 — планируйте обновление.
Как работает веб-сервер Apache
При запуске главный процесс Apache запускается от root, открывает порты 80 и 443, читает конфигурацию и порождает рабочие процессы уже от непривилегированного пользователя — www-data в Debian/Ubuntu или apache в RHEL-подобных системах. Дальше путь запроса выглядит так:
- Рабочий процесс или поток принимает соединение и читает HTTP-запрос.
- По заголовку
Host(а для HTTPS — по SNI) Apache выбирает виртуальный хост, то есть блок<VirtualHost>конкретного сайта. - URL сопоставляется с файлом внутри
DocumentRoot; по пути применяются правила из<Directory>,<Location>и файлов .htaccess. - Модули делают свою часть работы: mod_rewrite переписывает адрес, mod_auth проверяет доступ, mod_proxy_fcgi передаёт PHP-скрипт в PHP-FPM, mod_deflate сжимает ответ.
- Ответ уходит клиенту, а строка о запросе записывается в access-лог, ошибки — в error-лог.
MPM: prefork, worker и event
То, как Apache распределяет соединения между процессами и потоками, определяет модуль мультипроцессной обработки — MPM (Multi-Processing Module). Одновременно работает только один, и от выбора сильно зависит потребление памяти.
| MPM | Как устроен | Когда нужен |
|---|---|---|
| prefork | Отдельный процесс на каждое соединение, без потоков | Только если используется не потокобезопасный модуль, прежде всего классический mod_php. Самый прожорливый по памяти |
| worker | Несколько процессов, в каждом — пул потоков | Компромисс: меньше памяти, но поток занят всё время keep-alive-соединения |
| event | Как worker, плюс отдельный поток-слушатель держит простаивающие keep-alive-соединения | Выбор по умолчанию для современных установок, особенно в связке с PHP-FPM |
Узнать, какой MPM активен, можно командой apachectl -V | grep -i mpm (в Debian — apache2ctl -V). Если в выводе prefork, а PHP давно работает через PHP-FPM, переход на event обычно заметно снижает расход памяти. Подробности — в официальной документации по MPM.
Модули
Сила Apache — в модульности. Ядро умеет немного, остальное подключается директивой LoadModule. Самые востребованные модули:
- mod_rewrite — перезапись URL и редиректы, основа «человекопонятных» адресов в CMS;
- mod_ssl — поддержка HTTPS и TLS;
- mod_headers — добавление и удаление заголовков ответа, в том числе заголовков безопасности;
- mod_proxy, mod_proxy_fcgi, mod_proxy_http — проксирование запросов в PHP-FPM или другой бэкенд;
- mod_deflate и mod_expires — сжатие и управление кэшированием;
- mod_remoteip — подстановка реального IP клиента, когда перед Apache стоит прокси;
Список загруженных модулей показывает apachectl -M. В Debian и Ubuntu модули включают и выключают утилитами a2enmod и a2dismod, в RHEL, AlmaLinux и Rocky — правкой файлов в /etc/httpd/conf.modules.d/.
Файл .htaccess
Одна из причин популярности Apache на виртуальном хостинге — файлы .htaccess. Это кусочки конфигурации, которые лежат прямо в папках сайта и применяются без перезапуска сервера: редиректы, запрет доступа, правила кэширования, ЧПУ для WordPress или Битрикса. Владелец сайта может менять поведение сервера, не имея root-доступа.
Цена удобства — производительность: при AllowOverride, отличном от None, Apache на каждом запросе ищет .htaccess во всех каталогах по пути к файлу. Поэтому на своём VPS правила лучше переносить в основной конфиг, а .htaccess оставлять там, где без него не обойтись. Как писать правила и не сломать сайт, разобрано в руководстве по .htaccess; позицию разработчиков сервера можно прочитать в документации Apache о .htaccess.
Apache и nginx: в чём разница
Вопрос «что такое nginx и Apache и что выбрать» задают постоянно. Оба — веб-серверы, оба бесплатны и умеют работать обратным прокси, но устроены по-разному.
| Критерий | Apache | nginx |
|---|---|---|
| Модель обработки | Процессы и потоки, выбор через MPM (prefork, worker, event) | Асинхронная событийная модель: несколько воркеров обслуживают тысячи соединений |
| Статические файлы | Отдаёт нормально, но тратит больше ресурсов на соединение | Сильная сторона: быстро и с минимумом памяти |
| PHP | Через mod_php внутри процесса или через PHP-FPM | Только внешним процессом, обычно PHP-FPM по FastCGI |
| Конфигурация на уровне папок | Есть: .htaccess | Нет, все правила в центральном конфиге |
| Модули | Подгружаются динамически через LoadModule | Динамические модули есть, но часть функций требует сборки |
| Типичная роль | Бэкенд для PHP-сайтов, виртуальный хостинг | Фронтенд: TLS, статика, балансировка, обратный прокси |
nginx выигрывает на множестве одновременных соединений и статике, Apache — на гибкости и совместимости с проектами, рассчитанными на .htaccess.
Связка nginx + Apache
Классическая схема, которую до сих пор используют панели ISPmanager и многие хостинги: nginx слушает порты 80 и 443, терминирует TLS, сам отдаёт картинки, CSS и JS, а запросы к PHP проксирует на Apache, который слушает, например, 127.0.0.1:8080. Сайт при этом продолжает пользоваться .htaccess, а нагрузка от медленных клиентов ложится на nginx. Как работает такая схема в целом, объяснено в материале про обратный прокси.
Главная ловушка связки — IP клиента. Без настройки Apache видит все запросы как пришедшие с 127.0.0.1, ломаются логи, ограничения по IP и антиспам. Лечится модулем mod_remoteip:
RemoteIPHeader X-Real-IP
RemoteIPTrustedProxy 127.0.0.1
При этом nginx должен передавать заголовок: proxy_set_header X-Real-IP $remote_addr;. Доверять заголовку можно только от своего прокси — иначе любой клиент подставит себе чужой адрес.
Где лежат конфиги Apache
Расположение файлов зависит от дистрибутива — это первое, что сбивает с толку при переходе между серверами.
| Что | Debian / Ubuntu | RHEL / AlmaLinux / Rocky |
|---|---|---|
| Главный конфиг | /etc/apache2/apache2.conf | /etc/httpd/conf/httpd.conf |
| Порты | /etc/apache2/ports.conf | директива Listen в httpd.conf |
| Сайты | sites-available/ + ссылки в sites-enabled/ | файлы *.conf в /etc/httpd/conf.d/ |
| Модули | mods-available/ и mods-enabled/ | /etc/httpd/conf.modules.d/ |
| Логи | /var/log/apache2/access.log, error.log | /var/log/httpd/access_log, error_log |
| Имя службы | apache2 | httpd |
| Пользователь | www-data | apache |
На Windows проект не выпускает собственных сборок — сайт httpd.apache.org отсылает к сторонним дистрибутивам, самый известный из которых Apache Lounge. Там конфиг обычно лежит в C:\Apache24\conf\httpd.conf, а служба регистрируется командой httpd.exe -k install из консоли администратора.
Минимальный виртуальный хост в Debian выглядит так (файл /etc/apache2/sites-available/example.ru.conf):
<VirtualHost *:80>
ServerName example.ru
ServerAlias www.example.ru
DocumentRoot /var/www/example.ru/public
<Directory /var/www/example.ru/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.ru-error.log
CustomLog ${APACHE_LOG_DIR}/example.ru-access.log combined
</VirtualHost>
Основные команды Apache
Установка и запуск в Debian и Ubuntu:
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
sudo ufw allow 'Apache Full'
В RHEL, AlmaLinux и Rocky Linux:
sudo dnf install httpd
sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Команды, которые пригодятся каждый день:
sudo apachectl configtest(то же, чтоapachectl -t) — проверка синтаксиса. Запускайте перед каждой перезагрузкой: ответSyntax OKзначит, что сервер поднимется.sudo systemctl reload apache2илиsudo systemctl reload httpd— перечитать конфигурацию без обрыва текущих соединений.sudo systemctl restart apache2— полный перезапуск, нужен, например, после смены MPM.sudo apachectl -S— какие виртуальные хосты загружены, какой из них используется по умолчанию для каждого порта.apache2 -vилиhttpd -v— версия сервера.sudo a2ensite example.ruиsudo a2dissite 000-default— включить сайт и выключить заглушку (Debian/Ubuntu).sudo a2enmod rewrite headers ssl— включить модули (Debian/Ubuntu).
Частые ошибки Apache и что они значат
Большинство проблем Apache честно описывает в error-логе — код с префиксом AH помогает быстро найти причину.
- 403 и
AH01630: client denied by server configuration— доступ запрещён директивойRequireв конфиге или .htaccess. - 403 и
AH00035: ... because search permissions are missing on a component of the path— у пользователя www-data или apache нет праваxна одну из папок по пути к сайту. Проверьте командойnamei -l /var/www/example.ru/public/index.php. - 403 и
AH01276: Cannot serve directory— в каталоге нет index-файла, а листинг выключен. Все варианты разобраны в статье об ошибке 403 Forbidden. - 500 и
Invalid command 'RewriteEngine'— в .htaccess есть правила mod_rewrite, а сам модуль не включён. Лечитсяa2enmod rewriteи reload. - 500 и
AH00124: Request exceeded the limit of 10 internal redirects— правила переписывания зациклились. Про остальные причины 500-й читайте в разборе Internal Server Error. - Сервер не стартует:
AH00072: make_sock: could not bind to address [::]:80— порт 80 уже занят, часто вторым веб-сервером. Кто его держит, покажетsudo ss -ltnp | grep ':80 '. - Предупреждение
AH00558: Could not reliably determine the server's fully qualified domain name— не критично: задайте глобальноServerName, и сообщение исчезнет. - 503 и
AH01114: failed to make connection to backend— Apache работает прокси, а бэкенд (PHP-FPM, приложение) не отвечает или слушает другой адрес.
Безопасность Apache: базовый минимум
Установка по умолчанию рассчитана на то, чтобы всё работало, а не на закрытость. Минимум правок:
ServerTokens ProdиServerSignature Off— сервер перестанет сообщать точную версию и ОС в заголовкеServerи на страницах ошибок (см. описание ServerTokens). Это не защита само по себе, но сканерам станет сложнее подбирать эксплойты под версию.Options -Indexes— запрет на листинг каталогов, чтобы не светить бэкапы и служебные файлы.TraceEnable Off— отключение метода TRACE.- Выключите неиспользуемые модули и закройте mod_status и server-info правилом
Require ip. - Через mod_headers добавьте заголовки безопасности: HSTS, X-Content-Type-Options, Content-Security-Policy.
- Своевременно обновляйте пакет: уязвимости в самом httpd находят регулярно, и дистрибутивы выпускают исправления.
Полный чек-лист для обоих серверов — в статье о безопасности веб-сервера.
Как проверить, что сайт работает на Apache
Самый быстрый способ — посмотреть заголовок Server в ответе. В Linux и macOS:
curl -sI https://example.ru | grep -i '^server'
В Windows 10 и 11 curl уже встроен, в cmd используйте curl.exe -sI https://example.ru, а в PowerShell:
(Invoke-WebRequest -Uri https://example.ru -Method Head).Headers.Server
Ответ вида Server: Apache/2.4.x (Ubuntu) говорит сам за себя. Но важно понимать ограничения: при ServerTokens Prod будет просто Apache, а если перед сервером стоит nginx или CDN, заголовок покажет nginx или cloudflare, хотя PHP по-прежнему обрабатывает Apache. Косвенные признаки — стандартные страницы ошибок с подписью «Apache Server at … Port 443» и поддержка .htaccess.
Без консоли то же самое можно сделать онлайн: проверка HTTP-заголовков покажет заголовок Server, код ответа и цепочку редиректов, а определение технологий сайта соберёт вместе веб-сервер, CMS, язык бэкенда и CDN. Чтобы оценить, не выдаёт ли сервер лишнего о себе и хватает ли защитных заголовков, запустите сканер безопасности.
Частые вопросы
Apache и Apache Tomcat — одно и то же?
Нет. Apache HTTP Server — веб-сервер общего назначения на C. Tomcat — отдельный проект того же фонда, контейнер для Java-приложений (сервлеты, JSP). Их часто ставят вместе: Apache принимает запросы и проксирует их в Tomcat.
Что значит Apache 2.0?
Чаще всего имеется в виду Apache License 2.0 — открытая лицензия, разрешающая коммерческое использование и изменение кода с сохранением уведомлений об авторстве. Текст опубликован на сайте фонда. Сам веб-сервер сейчас развивается в ветке 2.4.
Можно ли держать Apache и nginx на одном сервере?
Да, это распространённая схема. Главное — развести порты: nginx на 80/443, Apache на локальном адресе вроде 127.0.0.1:8080, и настроить mod_remoteip, чтобы видеть реальные IP посетителей.
Нужен ли Apache для WordPress или Битрикса?
Не обязательно: обе CMS работают и на nginx с PHP-FPM. Но из коробки они рассчитаны на .htaccess, поэтому с Apache меньше ручной настройки правил ЧПУ и защиты служебных папок.
Как перезапустить Apache без простоя сайта?
Сначала проверьте конфиг командой apachectl configtest, затем выполните systemctl reload apache2 (или httpd). Reload перечитывает настройки, не разрывая текущие соединения, в отличие от restart.