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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: bind() to 0.0.0.0:80 failed (98: Address already in use) Linux / DevOps

Nginx: bind() to 0.0.0.0:80 failed (Address already in use) — Решение

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

Служба Nginx не может запуститься или перезапуститься, переходя в аварийный статус. В системном журнале journalctl -u nginx или error.log фиксируется фатальный конфликт сетевого сокета: bind() to 0.0.0.0:80 failed (98: Address already in use) или bind() to [::]:80 failed (98: Address already in use).

ДиагностикаУтилитаТипичный виновник
Занят TCP порт 80ss -tulpn | grep :80Apache (httpd / apache2) или lighttpd
Зависший старый Nginxps aux | grep nginxЗомби-воркеры Nginx, не завершившиеся после kill -9
Дублирование listenКонфигурационные файлыОдновременный listen 80; и listen [::]:80; без ipv6only=on на старых версиях
  • Команда systemctl start nginx возвращает ошибку status=1/FAILURE.
  • Веб-сервер недоступен снаружи, либо вместо нужного сайта открывается дефолтная страница Apache.
  1. Найдите процесс, который уже захватил 80 порт:
    sudo ss -tulpn | grep :80
    # Либо с помощью lsof:
    sudo lsof -i :80
  2. Если порт занят веб-сервером Apache (apache2/httpd), отключите его и уберите из автозагрузки:
    sudo systemctl stop apache2 2>/dev/null || sudo systemctl stop httpd 2>/dev/null
    sudo systemctl disable apache2 2>/dev/null || sudo systemctl disable httpd 2>/dev/null
  3. Если порт занят зависшим мастер-процессом Nginx, принудительно завершите все старые инстансы:
    sudo killall -9 nginx
    # Или по номеру порта:
    sudo fuser -k 80/tcp
  4. Проверьте конфигурационные файлы Nginx на предмет конфликтов IPv4/IPv6 сокетов:
    # В современных версиях достаточно:
    listen 80;
    listen [::]:80;
  5. Запустите службу Nginx в штатном режиме:
    sudo systemctl start nginx
    sudo systemctl status nginx
Внимание: В дистрибутивах Debian/Ubuntu при установке некоторых пакетов (например, phpmyadmin, certbot) система может автоматически установить и запустить apache2 в качестве фоновой зависимости, что приводит к внезапному падению Nginx после перезагрузки сервера.
Практический опыт инженера: Если сервер работает в Docker, убедитесь, что другой контейнер не проброшен наружу директивой `-p 80:80` до старта основного хостового веб-сервера.

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

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

Это системная ошибка EADDRINUSE, возникающая при попытке вызвать системный вызов bind() на локальный сетевой адрес и порт, которые уже заняты другим активным дескриптором сокета.

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

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

Как сделать, чтобы Apache и Nginx работали на одном сервере?

Перенесите Apache на внутренний порт (например, 127.0.0.1:8080 в /etc/apache2/ports.conf), а Nginx оставьте на внешних портах 80 и 443 для проксирования динамических запросов.

Что делает директива reuseport в listen 80 reuseport?

Она позволяет нескольким независимым рабочим процессам Nginx напрямую создавать отдельные слушающие сокеты на одном порту, распределяя нагрузку силами ядра Linux.