Неожиданный результат работы с Nginx
На сервер заведены два портала, которые делятся с помощью Host-name в пространстве Nginx. SSL организован при помощи certbot.
Наводился порядок с сертификатами и после того, как были удалены два сертификата (не связанные с работой порталов и давно истекшие) упал Nginx сервер. Самое интересное, что systemctl status nginx.service выдает
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2021-12-13 10:48:55 CET; 35min ago
Docs: man:nginx(8)
Ошибка:
des. 13 10:48:55 u nginx[248435]: nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
des. 13 10:48:55 u nginx[248435]: nginx: [emerg] still could not bind()
des. 13 10:48:55 u systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
des. 13 10:48:55 u systemd[1]: nginx.service: Failed with result 'exit-code'.
des. 13 10:48:55 u systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Неожиданность заколючается в том, что оба портала остаются доступными (сразу оговорю, что данные не кэшированы). То есть извне все работает, как и должно.
Что я проверил:
ps -e, нашел pid дляnginxи вот, что там: три процесса и выглядят вот так
● snap.certbot.certbot.***********.scope
Loaded: loaded (/run/systemd/transient/snap.certbot.certbot.***********.scope; transien>
Transient: yes
Active: active (running) since Mon 2021-12-13 09:39:30 CET; 1h 35min ago
- Пробовал убить процессы связаные с
nginx, но они поднимаются снова ( вsystemd/system/nginx.serviceубрал автоматический reload и перезагрузил через daemon-reload, не помогло) - Пробовал убить процессы на 80 порту, но они поднимаются снова
Кто знает корень проблемы и куда копать, чтобы nginx работал "как надо"? Или может разъяснить, что я делаю не так
UPD
Добавлю проверку конфигурации nginx
~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Проверка по портам показывает, что nginx их использует
~$ sudo lsof -i -P -n | grep LISTEN
nginx 245336 www-data 6u IPv4 3142018 0t0 TCP *:80 (LISTEN)
nginx 245336 www-data 7u IPv6 3142019 0t0 TCP *:80 (LISTEN)
nginx 245336 www-data 8u IPv6 3142020 0t0 TCP *:443 (LISTEN)
nginx 245336 www-data 9u IPv4 3142021 0t0 TCP *:443 (LISTEN)
nginx 245337 www-data 6u IPv4 3142018 0t0 TCP *:80 (LISTEN)
nginx 245337 www-data 7u IPv6 3142019 0t0 TCP *:80 (LISTEN)
nginx 245337 www-data 8u IPv6 3142020 0t0 TCP *:443 (LISTEN)
nginx 245337 www-data 9u IPv4 3142021 0t0 TCP *:443 (LISTEN)
nginx 245338 www-data 6u IPv4 3142018 0t0 TCP *:80 (LISTEN)
nginx 245338 www-data 7u IPv6 3142019 0t0 TCP *:80 (LISTEN)
nginx 245338 www-data 8u IPv6 3142020 0t0 TCP *:443 (LISTEN)
nginx 245338 www-data 9u IPv4 3142021 0t0 TCP *:443 (LISTEN)
~$ sudo ps -ax | grep nginx
245336 ? S 0:00 nginx: worker process
245337 ? S 0:00 nginx: worker process
245338 ? S 0:00 nginx: worker process
250704 pts/7 S+ 0:00 grep --color=auto nginx
Ответы (3 шт):
Для проверки конфига поможет команда nginx -t, а для того чтобы перечитать конфиг nginx -s reload
Выглядит так, что все дело в сервисе certbot'а. Поищите его в /etc/systemd/system/, скорее всего там найдете определение, попробуйте остановить (дополнительно могут быть крон таймеры, проверьте /etc/cron.d/). Судя по информации в документации, для Nginx используется челлендж http-01 который как раз занимает 80 порт.
Управление процессами nginx осуществляется не только systemd, но и скриптами init.d:
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx restart
Остановить процессы nginx можно
kill $(ps aux | grep '[n]ginx' | awk '{print $2}')
или проще
killall nginx
Если в логи что-то записалось, можно их отфильтровать:
по заголовку команды процесса:
journalctl -f _COMM=nginxпо PID:
journalctl _PID=1071по пользователю:
journalctl _UID=1001
Вывести все PIDы и UIDы присутствующих в логах процессов можно соответсвенно
journalctl -F _PID
journalctl -F _UID