- Вопрос или проблема
- Ответ или решение
- Проблема: Краш Nginx и Apache, порт 80 занят, не удается начать/остановить/удалить
- 1. Определите, какой процесс занимает порт 80
- 2. Остановите процесс, использующий порт 80
- 3. Убедитесь, что все процессы остановлены
- 4. Переустановка Nginx или Apache
- 5. Изменение конфигурации (опционально)
- 6. Проверка логов
- 7. Переименование конфигураций (если необходимо)
- 8. Ребут системы
Вопрос или проблема
Я пытался настроить среду разработки на новой установке Ubuntu 18.04, и столкнулся с проблемой с Nginx и Apache.
Сначала я установил Apache2. Все казалось в порядке.
Затем я установил Composer, Laravel и Valet. Запуск valet install
выдал мне следующее сообщение:
[nginx] не установлен, устанавливаю его сейчас через Apt... 🍻
Чтение списков пакетов...
Формирование дерева зависимостей...
Чтение информации о состоянии...
Следующие НОВЫЕ пакеты будут установлены:
nginx
0 обновлено, 1 установлено, 0 к удалению и 5 не обновлено.
1 не полностью установлен или удален.
Необходимо получить 0 B/25.2 kB архивов.
После этой операции будет использовано 36.9 kB дополнительного дискового пространства.
Выбор ранее не выбранного пакета nginx.
(Чтение базы данных ... 172679 файлов и каталогов в данный момент установлены.)
Подготовка к распаковке .../nginx_1.14.0-0+bionic0_all.deb ...
Распаковка nginx (1.14.0-0+bionic0) ...
Настройка nginx-full (1.14.0-0+bionic0) ...
Работа для nginx.service завершилась неудачей, потому что управляющий процесс завершился с кодом ошибки.
Смотрите "systemctl status nginx.service" и "journalctl -xe" для получения подробной информации.
invoke-rc.d: initscript nginx, действие "start" завершилось неудачей.
● nginx.service - Высокопроизводительный веб-сервер и обратный прокси-сервер
Загрузка: загружен (/lib/systemd/system/nginx.service; включен; предустановка продавца: включена)
Активен: не удалось (Результат: код выхода) с субботы, 09 июня 2018 г. 19:03:35 MST; 9 мс назад
Документы: man:nginx(8)
Процесс: 4142 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (код=выход, статус=1/НЕУДАЧА)
Процесс: 4138 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (код=выход, статус=0/УСПЕХ)
09 июня 19:03:33 The-Lappy nginx[4142]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:03:33 The-Lappy nginx[4142]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:03:34 The-Lappy nginx[4142]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:03:34 The-Lappy nginx[4142]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:03:34 The-Lappy nginx[4142]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:03:34 The-Lappy nginx[4142]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:03:35 The-Lappy nginx[4142]: nginx: [emerg] все еще не удалось bind()
09 июня 19:03:35 The-Lappy systemd[1]: nginx.service: Управляющий процесс завершился, код=выход, статус=1
09 июня 19:03:35 The-Lappy systemd[1]: nginx.service: Не удалось с результатом 'код завершения'.
09 июня 19:03:35 The-Lappy systemd[1]: Не удалось запустить Высокопроизводительный веб-сервер и обратный прокси-сервер.
dpkg: ошибка при обработке пакета nginx-full (--configure):
установленный пакет nginx-full, постустановка скрипта, вернул код ошибки 1
dpkg: проблемы с зависимостями не дают настроить nginx:
nginx зависит от nginx-full (<< 1.14.0-0+bionic0.1~) | nginx-light (<< 1.14.0-0+bionic0.1~) | nginx-extras (<< 1.14.0-0+bionic0.1~); тем не менее:
Пакет nginx-full еще не настроен.
Пакет nginx-light не установлен.
Пакет nginx-extras не установлен.
nginx зависит от nginx-full (>= 1.14.0-0+bionic0) | nginx-light (>= 1.14.0-0+bionic0) | nginx-extras (>= 1.14.0-0+bionic0); тем не менее:
Пакет nginx-full еще не настроен.
Пакет nginx-light не установлен.
Пакет nginx-extras не установлен.
dpkg: ошибка при обработке пакета nginx (--configure):
проблемы с зависимостями - оставляя не настроенным
Нет отчета aport, так как сообщение об ошибке указывает на то, что это последующая ошибка после предыдущей неудачи.
Ошибки возникли при обработке:
nginx-full
nginx
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
В строке 74 файла Apt.php:
Apt не удалось установить [nginx].
установить [--ignore-selinux]
Запуск sudo apt-get remove nginx
дает мне:
Чтение списков пакетов... Готово
Формирование дерева зависимостей
Чтение информации о состоянии... Готово
Следующие пакеты были установлены автоматически и больше не нужны:
libnginx-mod-http-auth-pam libnginx-mod-http-dav-ext libnginx-mod-http-echo libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-subs-filter libnginx-mod-http-upstream-fair
libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream nginx-common nginx-full
Используйте 'sudo apt autoremove', чтобы удалить их.
Следующие пакеты будут УДАЛЕНЫ:
nginx
0 обновлено, 0 вновь установлено, 1 к удалению и 5 не обновлено.
2 не полностью установлены или удалены.
После этой операции будет освобождено 36.9 kB дискового пространства.
Хотите продолжить? [Y/n] y
(Чтение базы данных ... 172681 файлов и каталогов в данный момент установлены.)
Удаление nginx (1.14.0-0+bionic0) ...
Настройка nginx-full (1.14.0-0+bionic0) ...
Работа для nginx.service завершилась неудачей, потому что управляющий процесс завершился с кодом ошибки.
Смотрите "systemctl status nginx.service" и "journalctl -xe" для получения подробной информации.
invoke-rc.d: initscript nginx, действие "start" завершилось неудачей.
● nginx.service - Высокопроизводительный веб-сервер и обратный прокси-сервер
Загрузка: загружен (/lib/systemd/system/nginx.service; включен; предустановка продавца: включена)
Активен: не удалось (Результат: код выхода) с субботы, 09 июня 2018 г. 19:08:44 MST; 9 мс назад
Документы: man:nginx(8)
Процесс: 4279 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (код=выход, статус=1/НЕУДАЧА)
Процесс: 4278 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (код=выход, статус=0/УСПЕХ)
09 июня 19:08:43 The-Lappy nginx[4279]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:08:43 The-Lappy nginx[4279]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:08:43 The-Lappy nginx[4279]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:08:43 The-Lappy nginx[4279]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:08:44 The-Lappy nginx[4279]: nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
09 июня 19:08:44 The-Lappy nginx[4279]: nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
09 июня 19:08:44 The-Lappy nginx[4279]: nginx: [emerg] все еще не удалось bind()
09 июня 19:08:44 The-Lappy systemd[1]: nginx.service: Управляющий процесс завершился, код=выход, статус=1
09 июня 19:08:44 The-Lappy systemd[1]: nginx.service: Не удалось с результатом 'код завершения'.
09 июня 19:08:44 The-Lappy systemd[1]: Не удалось запустить Высокопроизводительный веб-сервер и обратный прокси-сервер.
dpkg: ошибка при обработке пакета nginx-full (--configure):
установленный пакет nginx-full, постустановка скрипта, вернул код ошибки 1
Ошибки возникли при обработке:
nginx-full
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
Итак, похоже, что он был частично установлен и затем не смог удалить nginx.
Запуск sudo nginx
дает мне:
nginx: [emerg] bind() to 0.0.0.0:80 не удалось (98: Адрес уже используется)
nginx: [emerg] bind() to [::]:80 не удалось (98: Адрес уже используется)
nginx: [emerg] все еще не удалось bind()
Запуск sudo apachectl start
сообщает мне, что процесс завершился с кодом ошибки и чтобы проверить логи. /var/log/apache2/error.log содержит:
[Суббота, 09 июня 2018 г. 17:24:52.483178] [mpm_event:notice] [pid 19739:tid 140694647565248] AH00489: Apache/2.4.29 (Ubuntu) настроен -- продолжаю нормальные операции
[Суббота, 09 июня 2018 г. 17:24:52.483281] [core:notice] [pid 19739:tid 140694647565248] AH00094: Командная строка: '/usr/sbin/apache2'
[Суббота, 09 июня 2018 г. 18:39:50.318815] [core:warn] [pid 32508:tid 140277927611328] AH00098: файл pid /var/run/apache2/apache2.pid перезаписан -- Нечистое завершение предыдущего запущенного Apache?
[Суббота, 09 июня 2018 г. 18:39:50.319348] [mpm_event:notice] [pid 32508:tid 140277927611328] AH00489: Apache/2.4.29 (Ubuntu) настроен -- продолжаю нормальные операции
[Суббота, 09 июня 2018 г. 18:39:50.319367] [core:notice] [pid 32508:tid 140277927611328] AH00094: Командная строка: '/usr/sbin/apache2'
[Суббота, 09 июня 2018 г. 18:40:33.313855] [core:warn] [pid 32625:tid 140576383269824] AH00098: файл pid /var/run/apache2/apache2.pid перезаписан -- Нечистое завершение предыдущего запущенного Apache?
[Суббота, 09 июня 2018 г. 18:40:33.314401] [mpm_event:notice] [pid 32625:tid 140576383269824] AH00489: Apache/2.4.29 (Ubuntu) настроен -- продолжаю нормальные операции
[Суббота, 09 июня 2018 г. 18:40:33.314419] [core:notice] [pid 32625:tid 140576383269824] AH00094: Командная строка: '/usr/sbin/apache2'
[Суббота, 09 июня 2018 г. 18:41:57.804899] [mpm_event:notice] [pid 32625:tid 140576383269824] AH00491: пойман SIGTERM, завершение работы
Так что это странно, что я не могу запустить Apache. Тем не менее, посещение localhost в моем браузере приводит меня на страницу по умолчанию ubuntu apache2.
Кроме того, завершение работы того, что запущено на порту 80 с помощью fuser
, не помогает.
Так что я немного озадачен. Можете ли вы, пожалуйста, помочь разобраться с этим вопросом?
ИЗМЕНЕНИЕ: Я запустил sudo apt-get remove nginx nginx-full
, а затем выполнил sudo netstat -ltnp | grep -w ':80'
и получил это:
Активные интернет-соединения (только серверы)
Протокол Recv-Q Send-Q Локальный адрес Удаленный адрес Состояние PID/Имя программы
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 10008/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2151/nginx: master
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 713/systemd-resolve
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5957/cupsd
tcp6 0 0 :::80 :::* LISTEN 2151/nginx: master
tcp6 0 0 ::1:631 :::* LISTEN 5957/cupsd
Я немного поэкспериментировал с этим, а затем запустил sudo apt-get remove nginx-core nginx-full nginx-light nginx-extras nginx-naxsi nginx-common
.
Однако, netstat все еще показывал, что nginx все еще работает:
tcp6 0 0 :::80 :::* LISTEN 2151/nginx: master
Так что в этот момент я перезагрузил машину, и когда я запустил netstat, он просто показал, что apache работает и слушает на порту 80. Я остановил apache и запустил valet install
, и valet установился успешно.
Я не уверен, что можно сделать вывод здесь, кроме того, что ни в коем случае не следует пытаться установить nginx через valet, пока apache2 работает в фоновом режиме.
Единственный оставшийся вопрос: почему мне пришлось выполнить полную перезагрузку системы, чтобы исправить проблему.
Ubuntu 18.04. Порт 80 используется другим процессом.
netstat -ltnp | grep -w ':80'
tcp6 0 0 :::80 :::* LISTEN 4114/httpd
В моем случае pid процесс 4114 соответствует программе nextcloud. (Я установил его ошибочно перед nginx, который является предпосылкой).
Затем вам нужно изменить порт в конфигурации по умолчанию nginx, если вы не хотите изменять конфигурацию nexcloud или другого процесса или если вы не хотите убивать его (оба варианта в любом случае хороши). Отредактируйте файл:
sudo gedit /etc/nginx/sites-enabled/
В начале этого файла, после комментариев, вы найдете две строки:
server {
listen 80 default_server;
listen [::]:80 default_server;
Отредактируйте этот файл и поставьте 81 вместо 80, если вы хотите установить 81 в качестве порта для nginx. Это изменение актуально даже если apache2 работает в той же системе и уже занял этот стандартный порт. Если любой другой процесс занимает порт 80, вы должны остановить его перед установкой других программ, таких как nginx. На Ubuntu 18.04 возникают ошибки зависимостей, которые почти невозможно устранить, но причина только в том, что nginx не может использовать стандартный порт 80.
Если вы не хотите удалять процесс, который занимает порт 80, то вам хотя бы нужно его убить перед тем, как что-то делать:
fuser -k -n tcp 80
Ответ или решение
Конечно! Вот полный ответ на вашу проблему, изложенный на русском языке:
Проблема: Краш Nginx и Apache, порт 80 занят, не удается начать/остановить/удалить
Судя по вашему описанию, проблема заключалась в том, что серверы Nginx и Apache пытались одновременно использовать порт 80, который является стандартным портом для HTTP-серверов. Вот последовательность шагов, которую вы можете предпринять для решения этой проблемы:
1. Определите, какой процесс занимает порт 80
В первую очередь, необходимо выяснить, какой процесс в данный момент использует порт 80. Вы уже использовали команду netstat
, что является правильным шагом:
sudo netstat -ltnp | grep -w ':80'
Если вы видите в выводе, что порт 80 занят, обратите внимание на PID (идентификатор процесса) и название программы:
tcp6 0 0 :::80 :::* LISTEN 2151/nginx: master
2. Остановите процесс, использующий порт 80
Если это Nginx, вы можете остановить его с помощью команды:
sudo systemctl stop nginx
Если же это Apache, выполните:
sudo systemctl stop apache2
Также можно использовать fuser
, чтобы принудительно завершить процесс, занимающий порт 80:
sudo fuser -k -n tcp 80
3. Убедитесь, что все процессы остановлены
Проверьте снова, что процесс больше не работает на порту 80, выполнив ту же команду netstat
:
sudo netstat -ltnp | grep -w ':80'
4. Переустановка Nginx или Apache
Если вы хотите установить Nginx, убейте все процессы в порту и затем запустите установку:
sudo apt-get remove --purge nginx nginx-full nginx-common
sudo apt-get install nginx
Если требуется переустановить Apache, то выполните:
sudo apt-get remove --purge apache2
sudo apt-get install apache2
5. Изменение конфигурации (опционально)
Если вы не хотите останавливать один из серверов, вы можете рассмотреть возможность изменения порта одного из них. Например, откройте конфигурацию Nginx:
sudo nano /etc/nginx/sites-enabled/default
Затем измените строки:
server {
listen 80 default_server;
listen [::]:80 default_server;
}
на
server {
listen 81 default_server; # Измените 80 на 81 или другой порт
listen [::]:81 default_server;
}
После редактирования не забудьте перезапустить Nginx:
sudo systemctl restart nginx
6. Проверка логов
Если возникнут ошибки, проверьте журналы ошибок для Nginx и Apache, которые могут указать на возникшие проблемы. Логи Apache могут находиться в:
/var/log/apache2/error.log
А для Nginx:
/var/log/nginx/error.log
7. Переименование конфигураций (если необходимо)
Если вы столкнулись с проблемами при установке, возможно, стоит временно переименовать файлы конфигурации /etc/nginx/sites-enabled
или /etc/apache2/sites-enabled
.
8. Ребут системы
Как вы обнаружили, после перезагрузки системы проблемы исчезли. Это может происходить, если процессы не были корректно остановлены, и reboot позволяет системе перезагрузить все службы и освободить порты.
Следуя этим шагам, вы можете решить проблему с конфликтами портов между Nginx и Apache и добиться успешной работы обеих служб. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться!