MyTetra Share
Делитесь знаниями!
Ошибка сети Apache AH00072: make_sock: не удалось привязать к адресу ApacheСети
Время создания: 16.01.2021 13:49
Автор: alensav
Текстовые метки: Ошибка сети Apache AH00072: make_sock: не удалось привязать к адресу ApacheСети
Раздел: MyTetra - Ubuntu_Command
Запись: alensav/MyTetra2/main/base/1610794142s6dh4kua2z/text.html на raw.githubusercontent.com

Руководство

Ошибка сети Apache AH00072: make_sock: не удалось привязать к адресу Apache Сети

  • По Хамон Camisso Опубликовано 6 августа 2020 г. Бег 11,5 км Просмотры

Часть серии: Общие ошибки Apache

В этой серии руководств объясняется, как устранять неполадки и исправлять некоторые из наиболее распространенных ошибок, с которыми вы можете столкнуться при использовании веб-сервера Apache .

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

Введение

AH00072: make_sock: could not bind to addressСообщение об ошибке Apache создается, когда другой процесс прослушивает тот же порт, который настроен для использования Apache. Обычно порт будет стандартным портом 80для HTTP-соединений или портом 443для HTTPS-соединений. Однако любой конфликт порта с другим процессом может вызвать ошибку AH00072.

Ошибка возникает из сетевого стека базовой операционной системы. Проблема в том, что только один процесс может быть привязан к порту в любой момент времени. Если другой веб-сервер, например Nginx, настроен для прослушивания порта 80и работает, то Apache не сможет запросить порт для себя.

Чтобы обнаружить конфликт порта с Apache, вам необходимо проверить systemctlи journalctlвывести данные, чтобы определить IP-адрес и порт, которые вызывают ошибку. Затем вы можете решить, как решить проблему, будь то переключение веб-серверов, изменение IP-адреса, используемого Apache, порта или любой комбинации этих параметров.

Устранение неполадок с systemctl

Следуя инструкциям по устранению неполадок из руководства « Как устранить распространенные ошибки Apache» в начале этой серии, первым шагом при устранении неполадок с AH00072: make_sock: could not bind to addressсообщением об ошибке является проверка состояния Apache с помощью systemctl.

Если systemctlне включены выходные данные, описывающие проблему, то в последнем разделе этого руководства, Устранение неполадок с использованием journalctl журналов, объясняется, как исследовать systemdжурналы для поиска конфликтующего порта.

Выходные данные программы systemctl statuswill во многих случаях содержат всю диагностическую информацию, необходимую для устранения ошибки. Он будет включать IP-адрес, который использует Apache, а также порт, к которому он пытается привязаться. В выходных данных также будет указано, как долго Apache не запускался, чтобы вы могли определить, как долго проблема затрагивала Apache.

В дистрибутивах Linux, производных от Ubuntu и Debian, выполните следующее, чтобы проверить статус Apache:

Системы Ubuntu и Debian

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

В системах CentOS и Fedora используйте эту команду для проверки статуса Apache:

Системы CentOS и Fedora

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

-lФлаг будет гарантировать , что systemctlвыводит все содержимое строки, вместо того , подставив в (эллипсов ) для длинных линий. --no-pagerВыходной флаг будет весь журнал на экран , не прибегая к такому инструменту , как , lessчто только показывает экран контента одновременно.

Так как вы устраняете AH00072: make_sockсообщение об ошибке, вы должны получить вывод, подобный следующему:

Output● httpd.service - The Apache HTTP Server

Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)

Active: failed (Result: exit-code) since Tue 2020-07-28 13:58:40 UTC; 8s ago

Docs: man:httpd.service(8)

Process: 69 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)

Main PID: 69 (code=exited, status=1/FAILURE)

Status: "Reading configuration..."

Tasks: 213 (limit: 205060)

Memory: 25.9M

CGroup: /system.slice/containerd.service/system.slice/httpd.service


Jul 28 13:58:40 e3633cbfc65e systemd[1]: Starting The Apache HTTP Server…

Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

Jul 28 13:58:40 e3633cbfc65e httpd[69]: no listening sockets available, shutting down

Jul 28 13:58:40 e3633cbfc65e httpd[69]: AH00015: Unable to open logs

Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE

Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Failed with result 'exit-code'.

Jul 28 13:58:40 e3633cbfc65e systemd[1]: Failed to start The Apache HTTP Server.


Обратите внимание, что ваш вывод может немного отличаться, если вы используете дистрибутив, производный от Ubuntu или Debian, где имя процесса Apache отсутствует, httpdно есть apache2.

Этот пример systemctlвыходных данных включает несколько выделенных строк из systemdжурнала, описывающих ошибку AH00072. Эти строки, которые начинаются с обеих (98)Address already in use: AH00072: make_sock: could not bind to address, предоставляют всю информацию об ошибке AH00072, которая необходима для дальнейшего устранения неполадок, поэтому вы можете пропустить следующие journalctlшаги и вместо этого перейти к разделу « Устранение неполадок с помощью ss и ps утилит » в конце этого руководства.

Если ваш systemctlвывод не дает конкретной информации об IP-адресе и порте или портах, которые вызывают ошибку AH00072, вам нужно будет изучить journalctlвывод из systemdжурналов. В следующем разделе объясняется, как использовать journalctlдля устранения ошибки AH00072.

Устранение неполадок с использованием journalctlжурналов

Если ваш systemctlвывод не содержит подробных сведений об ошибке AH00072, вам следует продолжить использование journalctlкоманды для проверки systemdжурналов для Apache.

В системах, производных от Ubuntu и Debian, выполните следующую команду:

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

В системах, основанных на CentOS, Fedora и RedHat, используйте эту команду для проверки журналов:

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

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

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

Output-- Logs begin at Tue 2020-07-14 20:10:37 UTC, end at Tue 2020-07-28 14:01:40 UTC. --

. . .

Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

Jul 28 14:03:01 b06f9c91975d apachectl[71]: no listening sockets available, shutting down


This output indicates two AH00072 errors. The first of these explains that Apache cannot bind to the [::]:80 address, which is port 80 on all available IPv6 interfaces. The next line, with the address 0.0.0.0:80, indicates Apache cannot bind to port 80 on all available IPv4 interfaces. Depending on your system’s configuration, the IP addresses may be different and only show individual IPs, and may only include IPv4 or IPv6 errors.

Even though your own system may have different conflicting interfaces and ports, the errors will be similar to the output shown here. With output from journalctl you will be able to diagnose the issue using ss in the following section of this tutorial.

Troubleshooting with ss and ps Utilities

To troubleshoot an AH00072 error you need to determine what other process is listening on the IP address and port that Apache is attempting to use. Most modern Linux distributions include a utility called ss which can be used to gather information about the state of a system’s network sockets.

In the previous journalctl section, something was already bound to the IPv4 and IPv6 addresses on port 80. The following command will determine the name of the process that is already bound to an IPv4 interface on port 80. Ensure that you substitute the port from the error message if it is different from 80 in the following command:

  • sudo ss -4 -tlnp | grep 80 

The flags to the ss command alter its default output in the following ways:

  • -4 restricts ss to only display IPv4-related socket information.
  • -t restricts the output to tcp sockets only.
  • -l displays all listening sockets with the -4 and -t restrictions taken into account.
  • -n ensures that port numbers are displayed, as opposed to protocol names like ‘httporhttps`. This is important since Apache may be attempting to bind to a non-standard port and a service name can be confusing as opposed to the actual port number.
  • -p outputs information about the process that is bound to a port.

With all of those flags, you will receive output like the following:

OutputLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=40,fd=6))


The first three fields are not important when troubleshooting an AH00072 error so they can be ignored. The important fields are the fourth (0.0.0.0:80), which matches the journalctl error that you discovered earlier, along with the last users:(("nginx",pid=40,fd=6)), specifically the pid=40 portion.

If you have an AH00072 error that is related to an IPv6 interface, repeat the ss invocation, this time using the -6 flag to restrict the interfaces to the IPv6 network stack like this:

  • sudo ss -6 -tlnp |grep 80 

OutputLISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=40,fd=7))


Again, substitute the port number in question from your journalctl output if it is different from the highlighted 80 given here.

In both these cases of IPv4 and IPv6 errors, the ss output indicates that there is a program with process ID 40 (the pid=40 in the output) that is bound to the 0.0.0.0:80 and [::]:80 interfaces respectively. This process is preventing Apache from starting since it already owns the port. To determine the name of the program, use the ps utility like this, substituting the process ID from your output in place of the highlighted 40 value in this example:

  • sudo ps -p 40 

You will receive output that is similar to the following:

OutputPID TTY TIME CMD

40 ? 00:00:00 nginx


The highlighted nginx in the output is the name of the process that is listening on the interfaces. Now that you have the name of the program that is preventing Apache from starting, you can decide how to resolve the error. You could stop the nginx process, reconfigure nginx to listen on a different interface and port, or reconfigure Apache to avoid the port collision.

Важно отметить, что процесс может отличаться от, nginxа порт и IP-адреса могут не всегда совпадать, 0.0.0.0или [::]если вы диагностируете ошибку AH00072. Часто на одном сервере используются разные веб-серверы и прокси. Каждый может пытаться подключиться к разным портам IPv4 и интерфейсам IPv6 для обработки разного веб-трафика. Например, сервер, на котором настроен HAProxy, прослушивающий петлевой адрес IPv4 (также называемый localhost) на порту, 8080будет ssвыводить такие выходные данные:

OutputLISTEN 0 2000 127.0.0.1:8080 0.0.0.0:* users:(("haproxy",pid=545,fd=7))


Важно объединить systemctlвывод или journalctlвывод, который указывает конкретные IP-адреса и порты, с диагностическими данными от ss, а затем psсузить процесс, который вызывает сбой запуска Apache.

Заключение

В этом руководстве вы узнали, как устранить неполадки с AH00072 make_sock: could not bind to addressсообщением об ошибке Apache на интерфейсах IPv4 и IPv6. Вы узнали, как использовать его systemctlдля проверки состояния сервера Apache и поиска сообщений об ошибках. Вы также узнали, как использовать journalctlдля проверки systemdжурналов конкретной информации об ошибке AH00072.

С соответствующими сообщениями об ошибках из журналов вы затем узнали об этой ssутилите и о том, как ее использовать для проверки состояния сетевых сокетов системы. После этого вы узнали, как объединить информацию об идентификаторе процесса ssс помощью psутилиты, чтобы найти имя процесса, из-за которого Apache не может запуститься.

Далее в серии: Ошибка конфигурации Apache AH00558: не удалось надежно определить полное доменное имя сервера.

Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования