Apache Linux

Apache не запускается: Job for httpd.service failed

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Если Apache (httpd) не запускается, прочитайте журнал systemd и error_log, проверьте конфигурацию командой configtest, занятость портов 80 и 443, SELinux, права на сертификаты и синтаксис виртуальных хостов.

В этой статье
  1. Как искать причину
  2. Распространённые причины
  3. Порядок
  4. Откат изменений
  5. Если Apache упал после обновления пакетов
httpd failed to start
Job for httpd.service failed because the control process exited with error code / Failed to start The Apache HTTP Server
По-русскиСлужба Apache не запускается после изменения конфигурации или обновления.

#Как искать причину

Сообщение systemctl «failed» слишком общее. Реальная причина записана в журнале: строка с AH (код сообщения Apache) указывает на конфигурацию, порт, сертификат или права. Не гадайте — запустите проверку синтаксиса и прочитайте последние строки журнала. Чаще всего причины такие: опечатка в конфигурации, неверный путь к сертификату или модулю, порт уже занят другой программой (nginx), SELinux блокирует доступ, закончилось место на диске, неверный владелец каталога.

#Распространённые причины

Возможная причинаКак узнатьЧто делать
Ошибка синтаксисаОпечатка.configtest выводит строку.Исправьте указанную строку.
Порт занятnginx или другой Apache.Address already in use.Остановите конфликтующую службу.
Нет файла сертификатаНеверный путь.SSLCertificateFile does not exist.Укажите верный путь.
Не найден модульLoadModule.Cannot load modules/mod_x.so.Установите пакет модуля.
SELinux блокируетНестандартный порт/каталог.Permission denied в журнале.Настройте контексты.
Нет места на дискеЛоги заполнили диск.No space left on device.Очистите диск.

#Порядок

  1. Проверьте синтаксис конфигурацииПодключитесь к серверу через SSH или консоль хостинга и выполните sudo systemctl status apache2 --no-pager -l на Debian/Ubuntu либо sudo systemctl status httpd --no-pager -l на RHEL. Посмотрите строку Active, последнее сообщение и причину аварийного запуска. Не выполняйте многократные перезапуски без диагностики: временная ошибка может стать постоянным простоем.
  2. Прочитайте журнал службыСразу проверьте синтаксис конфигурации: sudo apachectl configtest (на некоторых системах sudo httpd -t). При Syntax OK причина может быть в занятом порту, сертификате или ресурсах; при Syntax error on line ... of ... откройте указанный файл и строку. Перед правкой сохраните его копию, не удаляйте весь виртуальный хост из-за одного сообщения.
  3. Прочитайте error_log ApacheОткройте последние события службы: sudo journalctl -u apache2 -n 80 --no-pager или замените имя на httpd. В журнале ищите конкретные фразы Address already in use, Cannot load, SSLCertificateFile и недоступные пути. Не путайте отказ systemd с ошибкой страницы сайта: после успешного запуска ошибка 500 разбирается отдельно.
  4. Проверьте, кто занимает порты 80 и 443При сообщении о занятом порту выполните sudo ss -tlnp | grep -E ":80 |:443 " и запишите процесс-владелец. На серверах с Nginx перед Apache это может быть нормальная схема, где Apache слушает 8080: проверьте файлы ports.conf, <VirtualHost ...> и панель. Не останавливайте Nginx и Apache одновременно. Исправляйте порт только по схеме обслуживания сайтов.
  5. Проверьте пути к сертификатам и модулямЕсли журнал сообщает о недоступном сертификате, откройте нужный виртуальный хост и проверьте пути в SSLCertificateFile и SSLCertificateKeyFile. Командой sudo ls -l /фактический/путь убедитесь, что файлы существуют, а служба имеет нужные разрешения, сохраняя конфиденциальность ключа. Не раздавайте приватному ключу глобальные права чтения; при утрате ключа выпустите новый сертификат.
  6. Проверьте SELinux/AppArmorПосле неудачного обновления проверьте загружаемые модули: apachectl -M и изменённые недавно файлы в mods-enabled или conf.d, в зависимости от дистрибутива. Если ошибка указывает на отсутствующий .so или неизвестную директиву, выясните, какой пакет или модуль её предоставлял. Не удаляйте случайные LoadModule: сначала восстановите рабочий файл из резервной копии или пакета.
  7. Проверьте место на диске и праваЕсли Apache стартует только иногда, проверьте свободное место df -h, память free -h и журнал ядра dmesg/journalctl -k на признаки нехватки ресурсов. Посмотрите, не запускается ли второй экземпляр с отдельной конфигурацией. Прежде чем повышать лимиты процессов, проверьте использование памяти и текущую нагрузку, иначе сервис может упасть снова.
  8. Откатите последнее изменение конфигурацииПосле устранения именно найденной причины выполните sudo apachectl configtest и запустите службу штатно: sudo systemctl start apache2 (либо httpd). Проверьте systemctl status, HTTP-ответ контрольного сайта и новых строк журнала. Если конфигурацию меняли, сохраняйте точный список правок, чтобы при новой ошибке вернуть рабочую версию.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Проверка синтаксиса (Debian/Ubuntu и RHEL/CentOS)
    Linux · Терминал (Bash)КомандаНужен sudo
    Проверка синтаксиса (Debian/Ubuntu и RHEL/CentOS)
    sudo apache2ctl configtest
    sudo httpd -t
    Вариант 2Журнал службы и последние записи error_log
    Linux · Терминал (Bash)КомандаНужен sudo
    Журнал службы и последние записи error_log
    sudo systemctl status apache2 --no-pager -l
    sudo journalctl -xeu apache2 --no-pager | tail -40
    sudo tail -n 40 /var/log/apache2/error.log
    sudo tail -n 40 /var/log/httpd/error_log
    Вариант 3Кто занимает порты 80 и 443
    Linux · Терминал (Bash)КомандаНужен sudo
    Кто занимает порты 80 и 443
    sudo ss -tlnp | grep -E ':80 |:443 '
    sudo lsof -i :80 -i :443
    Вариант 4Проверка SELinux и свободного места
    Linux · Терминал (Bash)КомандаНужен sudo
    Проверка SELinux и свободного места
    getenforce
    sudo ausearch -m avc -ts recent | tail -5
    df -h /var /etc
    Вариант 5Показать, какие виртуальные хосты и модули загружены
    Linux · Терминал (Bash)КомандаНужен sudo
    Показать, какие виртуальные хосты и модули загружены
    sudo apache2ctl -S
    sudo apache2ctl -M | head -40

#Откат изменений

Если Apache перестал работать после обновления, проверьте файлы .rpmnew или .dpkg-dist в каталоге конфигурации: пакет мог предложить новую версию. Сравните командой diff, верните рабочий файл из резервной копии. Для проверки без влияния на боевую конфигурацию запустите Apache в режиме переднего плана с отладкой: sudo apachectl -X покажет ошибки прямо в консоли.

#Если Apache упал после обновления пакетов

После обновления дистрибутив мог заменить версию PHP или модули: старые файлы LoadModule ссылаются на отсутствующие библиотеки. Сравните список загруженных модулей до и после командой apachectl -M и отключите лишние: sudo a2dismod имя на Debian/Ubuntu. Если используется mod_php, а в системе появилась новая версия PHP, может конфликтовать несколько модулей сразу — оставьте только один php* модуль или перейдите на PHP-FPM через proxy_fcgi. Проверьте также срок действия и права на файлы сертификатов в /etc/letsencrypt/live/: Apache не запустится, если один из виртуальных хостов ссылается на удалённый сертификат.

Linux · Терминал (Bash)КомандаНужен sudo
Найти ссылки на отсутствующие файлы сертификатов в конфигурации
sudo grep -RhoE "SSLCertificate(Key)?File\s+\S+" /etc/apache2/ | awk '{print $2}' | sort -u | xargs -I{} sh -c 'test -e {} || echo "НЕТ ФАЙЛА: {}"'

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.