Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH00072: make_sock: could not bind to address 0.0.0.0:80 Linux / DevOps

Apache Error AH00072: make_sock could not bind to address — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Веб-сервер Apache не может инициализировать сетевые сокеты и аварийно останавливается при старте. В error.log или journalctl регистрируется системная ошибка блокировки сокета: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 или AH00072: make_sock: could not bind to address [::]:443.

Сетевой портПроцесс-виновникПричина конфликта
TCP 80 / 443nginxNginx уже слушает стандартные HTTP/HTTPS порты хоста
TCP 80Зависший httpd / apache2Остаточные зомби-процессы Apache после некорректного kill
TCP 443haproxy, caddy, docker-proxyДругой балансировщик или проброс портов контейнера
Дублирование портовКонфигурация ports.confМногократное объявление директивы Listen 80
  • Служба переходит в состояние failed (Result: exit-code).
  • Внешние клиенты видят чужой веб-сервер (например, дефолтную страницу Nginx) или ошибку невозможности подключения.
  1. Найдите конкретный PID и имя процесса, занимающего целевой сетевой порт:
    sudo ss -tulpn | grep -E ":(80|443)"
    # Альтернативно через lsof:
    sudo lsof -i :80 -i :443
  2. Если порт занят Nginx или другим веб-сервером, остановите его и отключите из автозагрузки (если Apache должен быть основным сервером):
    sudo systemctl stop nginx
    sudo systemctl disable nginx
  3. Если порт удерживается зависшими процессами старого инстанса Apache:
    sudo killall -9 apache2 2>/dev/null || sudo killall -9 httpd 2>/dev/null
    # Либо принудительно освободите порт:
    sudo fuser -k 80/tcp
    sudo fuser -k 443/tcp
  4. Проверьте конфигурацию на отсутствие дублирующихся директив Listen в файлах /etc/apache2/ports.conf, /etc/httpd/conf/httpd.conf и каталогах conf.d/, sites-enabled/:
    grep -rn "Listen" /etc/apache2/ # или /etc/httpd/
  5. Убедитесь, что директива Listen 80 объявлена строго один раз в глобальном контексте.
  6. Запустите службу Apache:
    sudo systemctl start apache2 # или sudo systemctl start httpd
    sudo systemctl status apache2
Apache за Nginx (Reverse Proxy): Если Apache должен работать в связке с Nginx на одном сервере, измените порт прослушивания Apache на внутренний (например, Listen 127.0.0.1:8080 в ports.conf) и настройте Nginx на проксирование динамических запросов через proxy_pass http://127.0.0.1:8080;.
Практический опыт инженера: В контейнерах Docker эта ошибка возникает при попытке запустить контейнер с флагом `--net=host`, когда на хостовой машине уже поднят локальный веб-сервер.

Частые вопросы (FAQ)

Что означает код ошибки ядра (98) Address already in use?

Это ошибка сокетов EADDRINUSE, означающая, что комбинация IP-адреса и TCP-порта уже зарегистрирована в сетевом стеке ядра Linux за другим работающим дескриптором.

Что делать, если ss и lsof не показывают ни одного процесса на 80 порту?

Сокет может находиться в состоянии TIME_WAIT ядра Linux после завершения тысяч соединений. Подождите 30-60 секунд либо включите опцию net.ipv4.tcp_tw_reuse в sysctl.

Может ли директива Listen [::]:80 конфликтовать с Listen 0.0.0.0:80?

В Linux по умолчанию IPv6 сокет слушает и IPv4 адреса (dual-stack), поэтому одновременное указание Listen 80 и Listen [::]:80 без отключенного ipv6only может вызывать конфликт привязки.

Как проверить порты Apache без запуска службы?

Используйте apache2ctl -S или httpd -S — команда выведет полный дамп виртуальных хостов и используемых ими IP-адресов и портов.