#Что означает ошибка
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80 no listening sockets available, shutting down
Ошибка Apache «AH00072: make_sock: could not bind to address 0.0.0.0:80 — Address already in use» означает, что порт уже занят другим процессом: вторым Apache, nginx, Skype, IIS, Docker. Apache не может запуститься, пока порт не освободится.
Решение — найти процесс, занимающий порт, и либо остановить его, либо перенастроить Apache на другой порт.
Apache при старте открывает порты из директив Listen. Если порт уже занят, запуск завершается ошибкой.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Запущен другой веб-серверПорт заняли nginx, другой Apache, IIS. | ss -ltnp показывает чужой процесс на порту 80/443. | Остановите лишний сервер или поменяйте порт. |
Дублируется директива ListenВ конфигурации Listen 80 указана дважды. | Ошибка сразу после правки конфигурации. | Удалите дубликат в ports.conf и виртуальных хостах. |
| Остался зависший процесс ApacheПредыдущий экземпляр не завершился. | ps показывает процессы apache2/httpd после остановки. | Завершите зависшие процессы и запустите заново. |
| На Windows порт занят системной службойПорт 80 занимают IIS, Skype или «Служба публикации». | netstat -ano показывает занявший процесс. | Остановите службу или смените порт. |
#Пошаговое решение
- Найдите процесс на портуПодключитесь по SSH и выполните
sudo ss -ltnp | grep -E ":80|:443", чтобы увидеть PID и имя программы на занятом порту. Если 80 уже слушает Nginx, это может быть штатная схема проксирования: не убивайте процесс и не отключайте сайт только ради запуска Apache. - Остановите конфликтующую службуОпределите, должен ли Apache слушать 80 напрямую или работать за Nginx на внутреннем порту. Проверьте
systemctl status nginx apache2и действующие схемы в панели хостинга. Если конфликт вызван случайно запущенным вторым экземпляром Apache, завершайте его штатной службой после проверки владельца процесса. - Проверьте конфигурациюОткройте в конфигурации Apache директивы
Listenи<VirtualHost>и проверьте, нет ли повторного подключения файла сListen 80, а также пересечения IPv4/IPv6. На Debian используйте/etc/apache2/ports.confи подключённые конфиги, на RHEL расположение другое. Сделайте копию перед правкой. - Запустите ApacheПосле исправления выполните
sudo apachectl configtest, а затемsudo systemctl start apache2либоhttpdсогласно системе; при работе через Nginx отдельно проверьте его проксирование на нужный backend. Убедитесь вactive (running)и отсутствии нового AH00072 в журнале. - Или смените портЕсли по архитектуре Apache должен слушать другой порт, измените
Listenи соответствующие<VirtualHost>/прокси-маршруты согласованно, сохранив прежнее значение для отката. Затемconfigtest, reload и проверка HTTP-запроса. Не выбирайте случайный порт и не открывайте его наружу без необходимости. - Показывают, какой процесс занял порты, и проверяют синтаксис конфигурацииLinux · Терминал (Bash)КомандаНужен sudoПоказывают, какой процесс занял порты, и проверяют синтаксис конфигурации. Команды только читают.
sudo ss -ltnp | grep -E ":80|:443"sudo apachectl configtest
#Если не помогло
Если нужен одновременно и Apache, и nginx, разведите их по портам (например, nginx на 80/443 как прокси к Apache на 8080). Не убивайте процессы по PID без понимания, что они делают.
#Как найти процесс
Linux: sudo ss -tlnp | grep :80 или sudo lsof -i :80. Windows: netstat -ano | findstr :80, затем tasklist /FI "PID eq НОМЕР". Частые виновники — nginx (sudo systemctl stop nginx), служба IIS (net stop was /y), Skype и службы публикации.
#Если нужен другой порт
В ports.conf и виртуальных хостах измените Listen 80 на Listen 8080 и <VirtualHost *:8080>. После правки проверьте sudo apachectl configtest и перезапустите sudo systemctl restart apache2.
sudo ss -tlnp | grep :80sudo apachectl configtest