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

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

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