Вопрос или проблема
Ошибка, которую я получаю, когда хочу перезапустить nginx:
x nginx.service - Высокопроизводительный веб-сервер и сервер реверс-прокси
Загружен: загружен (/lib/systemd/system/nginx.service; включен; предустановка: включено)
Активен: неудачное завершение (Результат: код выхода) с вс 2024-09-29 10:34:42 UTC; 6 секунд назад
Документы: man:nginx(8)
Процесс: 25645 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (код=выход, статус=0/УСПЕХ)
Процесс: 25647 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (код=выход, статус=1/НЕУДАЧА)
CPU: 31мс
29 сен 10:34:40 wemx nginx[25647]: nginx: [emerg] bind() к 0.0.0.0:80 не удалось (98: Адрес уже используется)
29 сен 10:34:40 wemx nginx[25647]: nginx: [emerg] bind() к [::]:80 не удалось (98: Адрес уже используется)
29 сен 10:34:41 wemx nginx[25647]: nginx: [emerg] bind() к 0.0.0.0:80 не удалось (98: Адрес уже используется)
29 сен 10:34:41 wemx nginx[25647]: nginx: [emerg] bind() к [::]:80 не удалось (98: Адрес уже используется)
29 сен 10:34:41 wemx nginx[25647]: nginx: [emerg] bind() к 0.0.0.0:80 не удалось (98: Адрес уже используется)
29 сен 10:34:41 wemx nginx[25647]: nginx: [emerg] bind() к [::]:80 не удалось (98: Адрес уже используется)
29 сен 10:34:42 wemx nginx[25647]: nginx: [emerg] По-прежнему не удалось выполнить bind()
29 сен 10:34:42 wemx systemd[1]: nginx.service: Контрольный процесс завершился, код=выход, статус=1/НЕУДАЧА
29 сен 10:34:42 wemx systemd[1]: nginx.service: Не удалось с результатом 'код выхода'.
29 сен 10:34:42 wemx systemd[1]: Не удалось запустить nginx.service - Высокопроизводительный веб-сервер и сервер реверс-прокси.
Ответ или решение
Ошибка, которую вы получаете при перезапуске nginx, указывает на то, что сервер пытается привязаться к порту 80, но этот порт уже занят другим процессом. Сообщение об ошибке bind() to 0.0.0.0:80 failed (98: Address already in use)
свидетельствует о том, что уже существует служба или процесс, который использует данный порт.
Вот пошаговая инструкция по устранению проблемы:
-
Проверьте, какой процесс использует порт 80:
Выполните следующую команду в терминале, чтобы узнать, какой процесс занимает порт 80:sudo lsof -i :80
Либо используйте команду
netstat
, если она установлена:sudo netstat -tuln | grep :80
Эти команды выдадут список процессов, использующих данный порт.
-
Остановите конфликтующий процесс:
После того как вы определите, какой процесс использует порт 80, вы можете его остановить. Например, если это другой экземпляр nginx, вы можете использовать следующую команду:sudo systemctl stop nginx
Если это другой веб-сервер (например, Apache), выполните команду для его остановки:
sudo systemctl stop apache2
Или, если это другой процесс, используйте
kill
с PID (идентификатором процесса), который вы получили из предыдущих команд:sudo kill <PID>
-
Попробуйте снова запустить nginx:
После остановки конфликтующего процесса попробуйте снова запустить nginx:sudo systemctl start nginx
-
Проверьте статус nginx:
Убедитесь, что nginx запустился успешно, с помощью команды:sudo systemctl status nginx
Вы должны увидеть сообщение, что сервис активен и работает.
-
Дополнительные проверки:
Если проблема сохраняется, возможно, вы хотите проверить конфигурацию nginx на наличие ошибок с помощью следующей команды:sudo nginx -t
Если есть ошибки в конфигурации, команда предоставит соответствующие сообщения, которые помогут вам их исправить.
-
Рассмотрите возможность изменения порта:
Если необходимо, и вы планируете использовать одновременно несколько веб-серверов, рассмотрите возможность изменения конфигурации nginx для использования другого порта, например, 8080. Сделать это можно в конфигурационных файлах nginx, изменив строки, которые содержатlisten 80;
наlisten 8080;
.
Следуя этим шагам, вы должны успешно устранить проблему с запуском nginx. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их.