Назад | Перейти на главную страницу

Nginx выключается каждые 3 месяца из-за той же ошибки неудачной привязки

Я управляю Symfony сайт на сервере, используя Nginx настроен с Let's Encrypt. Все идет нормально, когда я запускаю сервер (всегда с sudo service nginx start / restart)

Но каждые 3 месяца я замечаю, что сайт не работает. Когда я проверяю логи, всегда одно и то же:

2018/12/23 00:23:53 [notice] 22167#22167: signal process started
2018/12/23 00:23:53 [error] 22167#22167: open() "/run/nginx.pid" failed (2: No such file or directory)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: still could not bind()
2018/12/23 00:23:57 [alert] 22169#22169: unlink() "/run/nginx.pid" failed (2: No such file or directory)

Я знаю, что у других была такая же проблема, но при запуске. У меня что-то потом срабатывает ...

Также :

uname -a
Linux vps460780 4.9.0-7-amd64 #1 SMP Debian 4.9.110-3+deb9u2 (2018-08-13) x86_64 GNU/Linux

И при запуске nginx:

sudo netstat -tulpn | grep :443
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      6644/nginx: master

sudo netstat -tulpn | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7021/nginx: master

Я буду рад выложить любой другой файл конфигурации.

Ваш пост-хук Let's Encrypt должен перезагрузить nginx, а не начать сначала это, то есть:

--post-hook "systemctl reload nginx"

Чтобы выйти из текущей ситуации, завершите все существующие процессы nginx, а затем перезапустите nginx, то есть:

killall nginx
systemctl restart nginx

У меня была такая же проблема, и я обнаружил, что у меня запущено другое задание cron (как root), которое запускается certbot renew --post-hook="systemctl reload nginx". Я думаю, что раньше я прошел через учебник, чтобы установить его изначально, в котором мне было сказано добавить эту запись cron, но с тех пор все изменилось, и он устанавливает свою собственную.

Все еще нужно проверить, что это исправляет (подождите несколько месяцев, чтобы увидеть, произойдет ли это), но я подозреваю, что это все.