Ошибка Apache Port 80 is already in use by Nginx: меняем порты
Симптомы ошибки занятого порта
При попытке запустить веб-сервер 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-скрипты.
- Откройте файл портов Apache:
sudo nano /etc/apache2/ports.conf - Измените строку
Listen 80на локальный адрес и порт 8080:Listen 127.0.0.1:8080 - Измените порт внутри виртуального хоста Apache:
Заменитеsudo nano /etc/apache2/sites-available/000-default.conf<VirtualHost *:80>на<VirtualHost 127.0.0.1:8080>. - Перезапустите оба сервиса:
sudo systemctl restart apache2 sudo systemctl restart nginx
Проверка портов: Убедитесь, что каждый сервис слушает свой порт, выполнив sudo ss -tulpn | grep -E 'apache2|nginx'.
Частые вопросы (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.