Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

EADDRINUSE_PORT_80 Linux / DevOps

Ошибка Apache Port 80 is already in use by Nginx: меняем порты

Обновлено: 27.08.2026 · Официальная документация ↗

Симптомы ошибки занятого порта

При попытке запустить веб-сервер Apache2 вы получаете ошибку:

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down

Причина: два веб-сервера (Nginx и Apache) не могут одновременно слушать один и тот же сетевой порт 80 на одном IP-адресе.

Способы решения конфликта портов

Способ 1. Если вам нужен только один веб-сервер (например, Nginx)

Остановите и полностью отключите Apache из автозагрузки:

sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl restart nginx

Способ 2. Настройка связки Nginx (порт 80) + Apache (порт 8080)

Классическая схема работы: Nginx принимает внешние подключения и отдает статику, а Apache на порту 8080 обрабатывает PHP-скрипты.

  1. Откройте файл портов Apache:
    sudo nano /etc/apache2/ports.conf
  2. Измените строку Listen 80 на локальный адрес и порт 8080:
    Listen 127.0.0.1:8080
  3. Измените порт внутри виртуального хоста Apache:
    sudo nano /etc/apache2/sites-available/000-default.conf
    Замените <VirtualHost *:80> на <VirtualHost 127.0.0.1:8080>.
  4. Перезапустите оба сервиса:
    sudo systemctl restart apache2
    sudo systemctl restart nginx

Проверка портов: Убедитесь, что каждый сервис слушает свой порт, выполнив sudo ss -tulpn | grep -E 'apache2|nginx'.

💡 Практика специалистов: При настройке Apache за Nginx всегда привязывайте Listen в Apache строго к адресу 127.0.0.1:8080, а не 0.0.0.0:8080. Это гарантирует, что пользователи не смогут обойти правила безопасности Nginx прямым обращением по порту 8080.

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

Как быстро узнать, какая программа заняла 80 порт?

Выполните команду sudo lsof -i :80 или sudo ss -tulpn | grep :80. В крайнем правом столбце вы увидите имя процесса.

Почему после перезагрузки сервера Apache снова ломает Nginx?

Потому что оба сервиса добавлены в автозагрузку. Тот, который стартует на миллисекунду раньше, захватывает порт. Отключите ненужный через systemctl disable.

Нужно ли открывать порт 8080 в фаерволе UFW?

Нет! Если Apache настроен на 127.0.0.1:8080, он доступен только внутри сервера для Nginx. Открывать порт 8080 в интернет небезопасно.

Как передать реальный IP клиента из Nginx в Apache?

В блоке location Nginx добавьте директивы proxy_set_header X-Real-IP $remote_addr; и proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, а в Apache включите модуль remoteip.

Полезные материалы
Рекомендуем