Ошибка failed to start the apache http server

8 сентября, 2020 11:28 дп
4 715 views
| Комментариев нет

Centos, Debian, LAMP Stack, Ubuntu

Эта серия мануалов поможет вам предотвратить или устранить самые распространенные ошибки, которые возникают при работе с веб-сервером Apache.

Каждый последующий мануал в этой серии включает описание распространенных ошибок Apache, связанных с конфигурацией, сетью, файловой системой или привилегиями. Мы начнем с обзора команд и логов, которые вы можете использовать для устранения неполадок Apache. В последующих руководствах мы подробно рассмотрим конкретные ошибки.

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

Команды, которые необходимы для устранения неполадок Apache в большинстве дистрибутивов Linux:

  • systemctl – используется для управления сервисами Linux и взаимодействия с ними через менеджер сервисов systemd.
  • journalctl – используется для запроса и просмотра логов, созданных systemd.
  • apachectl – при устранении неполадок эта команда используется для проверки конфигурации Apache.

Далее мы подробно опишем эти команды, способы их использования и расположение логов Apache, в которых можно найти дополнительную информацию об ошибках.

Примечание: В системах Debian и Ubuntu сервис и процесс Apache называется apache2, а в CentOS, Fedora и других системах RedHat – httpd. Имя сервиса и процесса – это единственное отличие команд запуска, остановки и проверки состояния Apache в разных системах. Логи journalctl также должны работать одинаково в любой системе Linux, которая использует systemd для управления Apache. При работе с этим мануалом вы должны использовать правильное имя сервиса в зависимости от вашего дистрибутива Linux.

Команды systemctl для Apache

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

В Ubuntu и Debian используйте:

sudo systemctl status apache2.service -l --no-pager

Флаг -l отображает полный вывод без сокращения. Флаг –no-pager направляет вывод непосредственно на ваш терминал. Вы должны получить такой результат:

apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Mon 2020-07-13 14:43:35 UTC; 1 day 4h ago
Process: 929 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1346 (apache2)
Tasks: 55 (limit: 4702)
CGroup: /system.slice/apache2.service
├─1346 /usr/sbin/apache2 -k start
. . .

Чтобы изучить процесс веб-сервера в CentOS и Fedora, используйте:

sudo systemctl status httpd.service -l --no-pager

Вы получите такой результат:

httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2020-07-14 19:46:52 UTC; 3s ago
Docs: man:httpd.service(8)
Main PID: 21217 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 2881)
Memory: 16.6M
CGroup: /system.slice/httpd.service
├─21217 /usr/sbin/httpd -DFOREGROUND
. . .
Jul 14 19:46:52 localhost.localdomain httpd[21217]: Server configured, listening on: port 80

Независимо от дистрибутива вы должны обратить внимание на строку Active в выводе. Если ваш сервер Apache не отображается как active (running), хотя он должен работать, возможно, произошла ошибка и прервала его работу. Как правило, при возникновении ошибок в выводе будет строка failed:

Active: failed (Result: exit-code) since Tue 2020-07-14 20:01:29 UTC; 1s ago

Если проблема заключается в процессе или конфигурации Apache, вы можете устранить ее с помощью команды journalctl.

Команды journalctl для Apache

Чтобы проверить логи systemd для Apache, вы можете использовать команду journalctl. Логи systemd для Apache обычно содержат данные о проблемах с запуском или управлением процессом Apache.

Эти логи отделены от логов запросов и ошибок Apache. Команда journalctl отображает логи systemd, которые описывают сам сервис Apache (от его запуска до завершения работы, включая все ошибки процесса, которые могут возникнуть на этом пути).

В системах Ubuntu и Debian для проверки логов используйте следующую команду:

sudo journalctl -u apache2.service --since today --no-pager

Флаг –since today ограничивает вывод команды записями лога, начиная с 00:00:00 текущего дня. Использование этой опции поможет ограничить объем записей лога, которые вам необходимо изучить для выявления ошибок. Вы должны получить следующий результат:

Jul 14 20:12:14 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...
Jul 14 20:12:14 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

Если вы используете систему на базе CentOS или Fedora, введите эту версию команды:

sudo journalctl -u httpd.service --since today --no-pager

Вы получите такой результат:

Jul 14 20:13:09 centos8 systemd[1]: Starting The Apache HTTP Server...
. . .
Jul 14 20:13:10 centos8 httpd[21591]: Server configured, listening on: port 80

В случае ошибки в выводе будет строка, приведенная ниже (имя хоста будет отличаться в зависимости от дистрибутива Linux):

Jul 14 20:13:37 yourhostname systemd[1]: Failed to start The Apache HTTP Server.

Если в ваших логах Apache есть подобные ошибки, то следующее, что нужно сделать для устранения возможных проблем – это исследовать конфигурации Apache с помощью инструмента командной строки apachectl.

Устранение неполадок с помощью apachectl

Большинство дистрибутивов Linux включают утилиту apachectl в установку Apache по умолчанию. apachectl – бесценный инструмент, помогающий обнаруживать и диагностировать проблемы конфигурации Apache.

Проверьте конфигурацию Apache с помощью команды apachectl configtest. Инструмент проанализирует ваши файлы Apache и обнаружит все ошибки или недостающие настройки перед попыткой запуска сервера.

Команда одинакова для дистрибутивов Ubuntu, Debian, CentOS и Fedora:

sudo apachectl configtest

Если конфигурация Apache не содержит ошибок, вы получите такой результат:

Syntax OK

В зависимости от вашего дистрибутива Linux в выводе могут быть и другие строки, но самая важная строка – это та, в которой говорится, что с синтаксисом все ок.

Если в вашей конфигурации Apache есть ошибка (например, директива ссылается на деактивированный модуль) или опечатка, apachectl обнаружит ее и попытается уведомить вас о проблеме.

Например, попытка использовать в директиве отключенный модуль Apache приведет к появлению следующих сообщений apachectl:

AH00526: Syntax error on line 232 of /etc/apache2/apache2.conf:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.

В этом примере модуль ssl не включен, поэтому при проверке конфигурации директива SSLEngine выдает ошибку. Последняя строка также указывает, что в логе ошибок Apache может содержаться дополнительная информация, и это следующее место для поиска подробной отладочной информации.

Логи Apache

Логи Apache – очень полезный ресурс для устранения неполадок. Как правило, каждая ошибка, возникающая в браузере или другом HTTP-клиенте, создает соответствующую запись в логах Apache. Иногда Apache также выводит в свои логи ошибки, связанные с конфигурацией, встроенными модулями и другой отладочной информацией.

Чтобы проверить ошибки при устранении неполадок Apache на сервере Fedora, CentOS или RedHat, изучите файл /var/log/httpd/error_log.

Если вы устраняете неполадки в системе Debian или Ubuntu, проверьте /var/log/apache2/error.log с помощью инструмента tail или less. Например, чтобы просмотреть последние две строки лога ошибок с помощью tail, выполните следующую команду:

sudo tail -n 2 /var/log/apache2/error.log

Замените количество строк, которые вы хотите изучить. Укажите количество строк вместо числа 2 в команде.

В системе CentOS или Fedora файл журнала для проверки – /var/log/httpd/error_log.

Ниже мы приводим пример пример ошибки (ее текст не зависит от дистрибутива Linux):

[Wed Jul 15 01:34:12.093005 2020] [proxy:error] [pid 13949:tid 140150453516032] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:9090 (127.0.0.1) failed
[Wed Jul 15 01:34:12.093078 2020] [proxy_http:error] [pid 13949:tid 140150453516032] [client 127.0.0.1:42480] AH01114: HTTP: failed to make connection to backend: 127.0.0.1

Эти две строки представляют собой отдельные сообщения об ошибках. Обе они ссылаются на модуль, вызвавший ошибку (proxy в первой строке, proxy_http во второй), и содержат код ошибки, индивидуальный для модуля. Первый, AH00957, указывает на то, что сервер Apache пытался подключиться к бэкенд-серверу (в данном случае к 127.0.0.1 по порту 9090) с помощью модуля proxy, но не смог этого сделать.

Вторая ошибка исходит из первой: AH01114 – это ошибка модуля proxy_http, которая также указывает на то, что Apache не смог подключиться к бэкенд-серверу для выполнения HTTP-запроса.

Эти строки мы привели просто для примера. Если вы диагностируете ошибки на своем сервере Apache, скорее всего, вы найдете совсем другие строки с ошибками в ваших логах. Независимо от дистрибутива Linux, строки ошибок в логах всегда содержат соответствующий модуль Apache и код ошибки, а также текстовое описание ошибки.

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

Заключение

Устранение ошибок Apache может включать как диагностику ошибок сервиса, так и обнаружение неверно настроенных параметров модулей. В этом вводном руководстве по диагностике Apache мы посмотрели, как использовать ряд утилит, чтобы сузить круг возможных причин появления ошибок. Обычно эти утилиты нужно использовать в том же порядке, в каком они описаны тут (но вы всегда можете пропустить некоторые действия или начать сразу с изучения логов, если у вас есть общее представление о том, в чем может быть проблема).

Однако чаще всего полезно следовать общей схеме устранения неполадок и использовать эти инструменты в описанном порядке. Начните с systemctl, чтобы проверить состояние сервера Apache. Если вам нужна дополнительная информация, изучите логи systemd для Apache с помощью команды journalctl. Если после проверки journalctl проблема все еще не ясна, проверьте конфигурации Apache с помощью команды apachectl configtest. Для более глубокого изучения неполадок проверьте логи Apache, обычно они указывают на конкретную ошибку (предоставляя полезные для диагностики данные и коды ошибок).

Tags: Apache, apachectl, journalctl, systemctl

Установил apache на linux mint, при просмотре статуса Apache вылезает такая ошибка, помогите разобраться в проблеме.

    ● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Tue 2019-10-15 20:18:03 +07; 10min ago
  Process: 5060 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

окт 15 20:18:03 my-mint apachectl[5060]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive
окт 15 20:18:03 my-mint apachectl[5060]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
окт 15 20:18:03 my-mint apachectl[5060]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
окт 15 20:18:03 my-mint apachectl[5060]: no listening sockets available, shutting down
окт 15 20:18:03 my-mint apachectl[5060]: AH00015: Unable to open logs
окт 15 20:18:03 my-mint apachectl[5060]: Action 'start' failed.
окт 15 20:18:03 my-mint apachectl[5060]: The Apache error log may have more information.
окт 15 20:18:03 my-mint systemd[1]: apache2.service: Control process exited, code=exited status=1
окт 15 20:18:03 my-mint systemd[1]: apache2.service: Failed with result 'exit-code'.
окт 15 20:18:03 my-mint systemd[1]: Failed to start The Apache HTTP Server.

задан 15 окт 2019 в 13:34

kirill568's user avatar

1

apachectl[5060]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

Ошибка говорит о том, что 80 порт уже занят.
Остановите службу, которая занимает порт. Для проверки:

sudo netstat -tpln | grep ":80"

Либо в конфиге apache2 смените порт на другой.

ответ дан 15 окт 2019 в 13:55

netsys's user avatar

netsysnetsys

663 бронзовых знака

Сменил порт на другой в файле /etc/apache2/ports.conf в строке Listen 80

ответ дан 15 окт 2019 в 13:58

kirill568's user avatar

kirill568kirill568

1571 серебряный знак9 бронзовых знаков

Apologies for not asking specifics before hand, but comment on this and I can try to update this answer to be more specific.

The error is pretty self-explanatory. Apache has a structure for loading modules attached to the service. On Ubuntu there are 3 important files for each module. Let’s look at the mpm_prefork module that you should probably have out of the box. In /etc/apache2/mods-enabled/ you’ll find a mpm_prefork.load and an mpm_prefork.conf file.

Read those with vi or nano like so nano /etc/apache2/mods-enabled/mpm_prefork.load In here, you’ll see that it’s looking for a companion binary file called /usr/lib/apache2/modules/mod_mpm_prefork.so. Notice how the path seems similar to the error you’re getting?

So in your case you appear to have a php7.0.load file which is looking for /usr/lib/apache2/modules/libphp7.0.so. You should look to see that file is indeed there or not by listing that directory with ls /usr/lib/apache2/modules/ Is it there?

If not, then I recommend trying to reinstall php, which wouldn’t be the worst idea since php7.0 is going to be deprecated soon anyways (Dec 3, 2018 to be exact).

So run the following:

dpkg --get-selections | grep php*  # list all php packages installed
sudo apt remove php7.0  # but replace php7.0 with whatever you installed
sudo apt update
sudo apt install php libapache2-mod-php

If you are trying to install apache2 webserver as we mentioned in our another post “How to install Apache webserver on Ubuntu ?” there are chances that you may see an error like “systemd[1]: Failed to start The Apache HTTP Server.” in a red color on command line as below,

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
invoke-rc.d: initscript apache2, action "start" failed.
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Mon 2020-05-18 23:42:39 IST; 6ms ago
  Process: 5424 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

May 18 23:42:39 devlab apachectl[5424]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
May 18 23:42:39 devlab apachectl[5424]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
May 18 23:42:39 devlab apachectl[5424]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
May 18 23:42:39 devlab apachectl[5424]: no listening sockets available, shutting down
May 18 23:42:39 devlab apachectl[5424]: AH00015: Unable to open logs
May 18 23:42:39 devlab apachectl[5424]: Action 'start' failed.
May 18 23:42:39 devlab apachectl[5424]: The Apache error log may have more information.
May 18 23:42:39 devlab systemd[1]: apache2.service: Control process exited, code=exited status=1
May 18 23:42:39 devlab systemd[1]: apache2.service: Failed with result 'exit-code'.
May 18 23:42:39 devlab systemd[1]: Failed to start The Apache HTTP Server.

Solution

Its possible that you may already have some other webserver running on your website which is using port 80, hence it was showing an error as “Address already in use: : make_sock: could not bind to address” so we have to identify which application is using this port 80 and stop this application so as we can install apache2.

Check which app is using port 80, you can use below command and Close this program and kill using command line. [ You can also refer to our post “Identify which application / process is using which port or keeping it busy on android / Linux” ]

$ sudo netstat -nap | grep 80

In our Desktop, we had “lighthttpd” installed and running which was causing this problem, so we used below command to identify it as,

$ ps -ax | grep httpd
 6165 ?        Ss     0:00 /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf

and then stopped this webserver as,

$ sudo /etc/init.d/lighttpd stop
[ ok ] Stopping lighttpd (via systemctl): lighttpd.service.


0

1

root@vm-9699334a:~# sudo systemctl status apache2
● apache2.service — The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enab
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since Sat 2020-05-09 19:43:59 UTC; 27min ago

May 09 19:43:59 vm-9699334a systemd[1]: Starting The Apache HTTP Server…
May 09 19:43:59 vm-9699334a apachectl[23308]: apache2: Could not open configuration f
May 09 19:43:59 vm-9699334a apachectl[23308]: Action ‘start’ failed.
May 09 19:43:59 vm-9699334a apachectl[23308]: The Apache error log may have more info
May 09 19:43:59 vm-9699334a systemd[1]: apache2.service: Control process exited, code
May 09 19:43:59 vm-9699334a systemd[1]: apache2.service: Failed with result ’exit-cod
May 09 19:43:59 vm-9699334a systemd[1]: Failed to start The Apache HTTP Server.
lines 1-13/13 (END)

Понравилась статья? Поделить с друзьями:
  • Ошибка failed to start precomp exe
  • Ошибка failed to start denuvo driver
  • Ошибка failed to start application 2000
  • Ошибка failed to set display mode
  • Ошибка failed to load the launcher dll