DevOps

Коды ошибок Apache2: почему не запускается сервер

Разбор кодов ошибок Apache2 (AH00558, AH03490, syntax error), когда сервер не перезапускается. Пошаговая диагностика: apachectl configtest, логи error.log, systemctl status, проверка портов и готовые решения для VPS Ubuntu/Debian.

Что означают коды ошибок Apache2, когда я не могу перезапустить веб-сервер?

Я столкнулся с проблемой с моим веб-сервером Apache2 на VPS, который неожиданно выключился и не перезапускается. Я вижу коды ошибок, но не уверен, что они означают или как исправить проблему. Я недавно не вносил никаких изменений в конфигурацию, поэтому не уверен, что могло вызвать эту проблему. Может кто-нибудь помочь мне понять коды ошибок и предоставить шаги по устранению неполадок для решения этой проблемы?

Apache2 не запускается чаще всего из‑за ошибок конфигурации, занятого порта, проблем с модулем или исчерпания внутренних ресурсов (например ServerLimit/MaxRequestWorkers). Коды ошибок Apache2 (AH00558, AH03490, синтаксические ошибки, Cannot load … и др.) подсказывают, где смотреть — в конфигурационных файлах, в логах или в занятом порте; для быстрой проверки используйте systemctl status apache2, apachectl configtest и tail /var/log/apache2/error.log. Ниже — подробная пошаговая инструкция по расшифровке кодов ошибок и устранению самых частых причин, с командами и готовыми правками конфигов.


Содержание


Симптомы и первичная диагностика

Если Apache2 неожиданно выключился и не стартует, обычно вы увидите одну из следующих картин:

  • systemd сообщает об ошибке: apache2.service: Control process exited, code=exited, status=1/FAILURE или Active: failed (Result: exit-code).
  • в логе ошибок (/var/log/apache2/error.log) появляются строки с кодами AHxxxx или сообщения “Cannot load …”.
  • порт 80/443 уже занят другим процессом (nginx, другой инстанс Apache).
  • при попытке старта сервис быстро падает без видимой причины.

Что сделать в первую очередь (быстро, чтобы не терять время):

  • не паниковать — начать с логов и теста конфигурации;
  • проверить статус службы и системный журнал (журнал часто показывает причину при старте или при попытке рестарта).

Подробно о работе с systemd и journalctl см. практические заметки по диагностике: Почему Apache не запускается.


Быстрая диагностика: команды и что смотреть

Выполните эти команды и смотрите вывод по порядку:

bash
sudo systemctl status apache2.service
sudo journalctl -u apache2.service --since "5 minutes ago"
sudo apachectl configtest # или apache2ctl configtest
sudo tail -n 200 /var/log/apache2/error.log
sudo ss -ltnp | grep ':80\|:443' # или netstat -tulpn | grep :80
ps aux | grep -E 'apache2|httpd'
sudo apache2ctl -M # список загруженных модулей
sudo apache2ctl -V # информация о сборке
df -h # свободное место на диске

Как интерпретировать:

  • apachectl configtest должен вернуть Syntax OK; если нет — сообщение указывает файл и строку с ошибкой (сначала исправляем синтаксис).
  • journalctl показывает расширенный вывод systemd сразу после попытки старта — там часто есть стек ошибок или подсказка, какой модуль/директива упала.
  • последние строки /var/log/apache2/error.log — главный источник для расшифровки AH-кодов и сообщений типа “Cannot load”.
  • ss/netstat покажут, если порт занят — тогда Apache не сможет забиндить порт и упадёт с ошибкой “Address already in use”.

Официальная документация по началу работы и логам полезна при проверке путей ErrorLog и команд: Getting Started — Apache.


Коды ошибок Apache2: расшифровка и примеры

Ниже — самые частые коды/сообщения и что с ними делать.

AH00558 — “Could not reliably determine the server’s fully qualified domain name”

  • Что значит: у Apache нет глобальной директивы ServerName, он не может определить FQDN.
  • Последствия: обычно это предупреждение; но в некоторых конфигурациях мешает работе виртуальных хостов.
  • Как исправить: добавить в глобальный конфиг (/etc/apache2/apache2.conf или в файл в /etc/apache2/conf-available/) строку ServerName your.domain.or.IP и выполнить sudo apachectl configtest && sudo systemctl restart apache2.

AH03490 — “scoreboard is full, not at MaxRequestWorkers. Increase ServerLimit”

  • Что значит: внутренний «табло» (scoreboard) для рабочих процессов переполнен — обычно из‑за слишком малого ServerLimit/MaxRequestWorkers или резкого всплеска запросов.
  • Как исправить: правьте параметры MPM (prefork/worker/event). Пример для prefork:
xml
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
ServerLimit 150
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>

После правки: sudo apachectl configtest && sudo systemctl restart apache2. Не ставьте слишком большие значения на маленьком VPS — это приведёт к OOM. Пример реальной разблокировки этой ошибки — кейс и разбор: AH03490 — увеличить ServerLimit.

“Syntax error on line X of /etc/apache2/…”

  • Что значит: опечатка или неверная директива в конфиге.
  • Как исправить: открыть файл, поправить синтаксис, можно использовать apachectl -t для детальной проверки. После правки выполнить apachectl configtest.

“Cannot load … into server: Cannot find the specified module” (чаще на Windows, но бывает и в Linux)

  • Что значит: Apache пытается загрузить модуль, но файла нет или он несовместим (битность, версия, зависимость).
  • Как исправить (Windows): проверьте путь в LoadModule, убедитесь, что файл существует и что установлен нужный Visual C++ redistributable; для Linux переустановите пакет модуля или подключите корректный пакет (libapache2-mod-php и пр.). Пример сообщения и рекомендаций для Windows: Ошибки при настройке Apache/PHP.

“Address already in use” / AH00072

  • Что значит: порт 80/443 занят другим процессом.
  • Как исправить: найти процесс (ss -ltnp | grep ':80' или lsof -i:80), остановить его (systemctl stop nginx или kill <pid>), либо изменить Listen в конфиге Apache на другой порт.

AH00124 — “Request exceeded the limit of X internal redirects”

  • Что значит: цикл перенаправлений (rewrite loop).
  • Как исправить: проверяйте правила mod_rewrite / .htaccess, устраните конфликтующие правила.

“Unable to open logs” или ошибки доступа к логам

  • Что значит: директория логов или файл логов недоступны (права/SELinux/AppArmor).
  • Как исправить: проверьте владельца/права (ls -ld /var/log/apache2), установите chown root:adm /var/log/apache2 и права, или настройте контекст SELinux.

Если вы видите незнакомый AH-код — скопируйте строку ошибки из /var/log/apache2/error.log и ищите конкретный фрагмент в интернете или прикрепите в вопрос на форуме (полезно приложить вывод apachectl configtest и последние 50 строк лога).


Типичные ошибки и готовые решения (шаг за шагом)

Порядок действий при “не перезапускается”:

  1. Проверка синтаксиса:
bash
sudo apachectl configtest
# если ошибка — откройте файл и исправьте указанную строку
  1. Посмотрите логи и journal:
bash
sudo tail -n 200 /var/log/apache2/error.log
sudo journalctl -u apache2.service --since "10 minutes ago"
  1. Проверка портов и процессов:
bash
sudo ss -ltnp | grep ':80\|:443'
ps aux | grep -E 'apache2|httpd'

Если порт занят — остановите сервис, который мешает, или смените порт.

  1. Модули:
bash
sudo apache2ctl -M
# если модуль не загружен или вызывает ошибку — отключите/переустановите:
sudo a2dismod <module>
sudo apt install --reinstall <package-with-module> # Debian/Ubuntu
  1. Память и MPM:
  • Ошибка scoreboard → увеличиваем ServerLimit/MaxRequestWorkers в конфиге MPM, но сначала оцените доступную память; при увеличении лимитов следите за потреблением RAM.
  1. Права и диск:
  • Проверьте df -h (нет ли заполненного диска) и права на директории сайта/логов.
  1. Перезапуск безопасно:
bash
sudo systemctl restart apache2
# если restart не проходит — попробуйте reload (не меняет запущенные процессы):
sudo systemctl reload apache2

Если после всех правок Apache всё ещё не стартует — запустите в отладочном/однопроцессном режиме, чтобы проследить ошибку:

bash
sudo apachectl -e debug -X

(этот режим запускает только один процесс в фореграунде с повышенным уровнем логирования).

Нужна ссылка с быстрыми командами по перезапуску и отличием restart/reload — см. обсуждение: Как перезапустить Apache?.


Windows: ошибки модулей и DLL

Типичный пример: Cannot load C:/Server/bin/PHP/php5apache2_4.dll into server: Cannot find the specified module.
Что делать:

  • Убедитесь, что путь в LoadModule корректен и файл действительно есть.
  • Проверьте совместимость (Apache 32/64 vs PHP 32/64), соответствие версии PHP и модуля.
  • Установите требуемые Visual C++ redistributables.
  • Временно закомментируйте строку LoadModule и попробуйте запустить Apache — так вы подтвердите, что причина в конкретном модуле.
    Подробно о типичных Windows‑ошибках и их решениях — apache-windows.ru.

Контрольный список восстановления и профилактика

Короткий чеклист, который сохраните и применяйте при подобных ситуациях:

  • [ ] Выполнить apachectl configtest — исправить ошибки синтаксиса.
  • [ ] Проверить последние 100–200 строк /var/log/apache2/error.log.
  • [ ] Просмотреть journalctl -u apache2.service после попытки запуска.
  • [ ] Проверить занятые порты (ss/netstat) и остановить конфликты.
  • [ ] Убедиться, что все нужные модули установлены (apache2ctl -M).
  • [ ] Проверить свободное место на диске и права на каталоги логов/веб-контента.
  • [ ] При ошибках типа scoreboard — отрегулировать ServerLimit/MaxRequestWorkers и просчитать RAM, не превышая возможности VPS.
  • [ ] Ввести версионирование конфигов (git для /etc/apache2) и бэкапы перед изменениями.
  • [ ] Настроить мониторинг (uptime/alert) и файрвол/ограничения для защиты от внезапных всплесков трафика.

Если нужна помощь с конкретной ошибкой — пришлите выводы:

  • sudo apachectl configtest
  • последние 50 строк /var/log/apache2/error.log
  • sudo ss -ltnp | grep ':80\|:443'
    — это позволяет быстро понять проблему и дать точную правку.

Источники


Заключение

Коды ошибок Apache2 — это не набор загадок, а указатели: они показывают, где смотреть — конфиг, модуль, порт или ресурсы. Начните с apachectl configtest, посмотрите последние строки /var/log/apache2/error.log и journalctl -u apache2.service, затем действуйте по сценарию (синтаксис → порты → модули → ресурсы). Если после шагов выше всё ещё не запускается, пришлите сюда вывод конфиг‑теста и последние строки лога — помогу разобрать и предложить конкретные правки для вашего VPS.

Авторы
Проверено модерацией
Модерация
Коды ошибок Apache2: почему не запускается сервер