Сервер:
Я использую Nginx в качестве входного прокси для своего сервера. Nginx работает внутри контейнера Docker.
докер-compose.yml:
nginx_ingress:
изображение: nginx: последний
порты:
- "80:80"
- "443:443"
сети:
передний уровень: {}
задний уровень:
ipv4_адрес: 172.28.1.1
перезапуск: всегда
тома:
- /var/lib/my-server/config/nginx_ingress:/etc/nginx/conf.d
- /var/lib/my-server/data/certbot/conf:/etc/letsencrypt
- /var/lib/my-server/data/certbot/www:/var/www/certbot
команда: "/bin/sh -c 'while:; сделать сон 6 часов и подождать $${!}; nginx -s перезагрузить; сделано & nginx -g \"демон выключен;\"'"
Поскольку я управляю несколькими сертификатами с помощью другого контейнера, я хочу, чтобы Nginx изящно перезагружала конфигурацию каждые 6 часов.
Идея состоит в том, что я могу управлять всеми своими сертификатами независимо от другого контейнера. Я не хочу, чтобы на моем хосте что-либо работало (без cronjob), и я не хочу объединять свой контейнер nginx-proxy с контейнером сертификата. Я хочу, чтобы каждая часть головоломки работала независимо.
(Я получил идею из этого урока: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)
Эта проблема:
Иногда перестает работать прокси (nginx). При этом сам контейнер Docker продолжает работать.
Журналы показывают следующее:
...
2021/10/25 05:51:42 [уведомление] 1#1: получен сигнал 3 (SIGQUIT), завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: корректное завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: выход
25.10.2021, 05:51:42 [уведомление] 13#13: корректное завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: выход
2021/10/25 05:51:42 [уведомление] 13#13: выход
2021/10/25 05:51:42 [уведомление] 13#13: выход
25.10.2021 05:51:42 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 12
2021/10/25 05:51:42 [уведомление] 1#1: рабочий процесс 12 завершился с кодом 0
2021/10/25 05:51:42 [уведомление] 1#1: рабочий процесс 13 завершился с кодом 0
2021/10/25 05:51:42 [уведомление] 1#1: выход
25.10.2021 05:51:44 [уведомление] 1#1: использование метода события "epoll"
2021/10/25 05:51:44 [уведомление] 1#1: nginx/1.21.3
25.10.2021 05:51:44 [уведомление] 1#1: построено с помощью gcc 8.3.0 (Debian 8.3.0-6)
25.10.2021 05:51:44 [уведомление] 1#1: ОС: Linux 5.4.0-86-универсальная
2021/10/25 05:51:44 [уведомление] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочие процессы
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочий процесс 9
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочий процесс 10
С иногда Я имею в виду иногда. Я пока не смог разобрать ни одной закономерности. Сначала я думал, что Nginx отключается каждые 6 часов из-за команда
. Но похоже, что это не так. Я сократил время сна до 2 минут, и Nginx продолжал нормально работать в течение нескольких часов. Затем я снова установил время сна на 6 часов, и ровно через 6 часов Nginx перестал работать (см. лог выше). Я перезапустил контейнер Docker и с тех пор Nginx работает (уже прошло более суток). Как видно из следующих логов, в большинстве случаев перезагрузка Nginx работает отлично:
...
25.10.2021, 11:51:44 [уведомление] 19#19: начался сигнальный процесс
25.10.2021 11:51:44 [уведомление] 1#1: сигнал 1 (SIGHUP) получен от 19, реконфигурация
25.10.2021 11:51:44 [уведомление] 1#1: реконфигурация
25.10.2021 11:51:44 [уведомление] 1#1: использование метода события "epoll"
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочие процессы
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочий процесс 21
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочий процесс 22
25.10.2021 11:51:44 [уведомление] 10#10: корректное завершение работы
25.10.2021 11:51:44 [уведомление] 9#9: корректное завершение работы
2021/10/25 11:51:44 [уведомление] 10#10: выход
2021/10/25 11:51:44 [уведомление] 9#9: выход
2021/10/25 11:51:44 [уведомление] 9#9: выход
2021/10/25 11:51:44 [уведомление] 10#10: выход
25.10.2021 11:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 10
25.10.2021 11:51:44 [уведомление] 1#1: рабочий процесс 9 завершился с кодом 0
25.10.2021 11:51:44 [уведомление] 1#1: рабочий процесс 10 завершился с кодом 0
25.10.2021 11:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
...
...
25.10.2021, 17:51:44 [уведомление] 23#23: начался сигнальный процесс
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 1 (SIGHUP) получен от 23, реконфигурация
25.10.2021 17:51:44 [уведомление] 1#1: реконфигурация
25.10.2021 17:51:44 [уведомление] 1#1: использование метода события "epoll"
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочие процессы
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочий процесс 25
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочий процесс 26
25.10.2021 17:51:44 [уведомление] 22#22: корректное завершение работы
25.10.2021 17:51:44 [уведомление] 21#21: корректное завершение работы
2021/10/25 17:51:44 [уведомление] 21#21: выход
25.10.2021 17:51:44 [уведомление] 22#22: выход
2021/10/25 17:51:44 [уведомление] 21#21: выход
2021/10/25 17:51:44 [уведомление] 22#22: выход
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 21
25.10.2021 17:51:44 [уведомление] 1#1: рабочий процесс 21 завершился с кодом 0
25.10.2021 17:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 22
25.10.2021 17:51:44 [уведомление] 1#1: рабочий процесс 22 завершился с кодом 0
25.10.2021 17:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
...
Мои вопросы:
- Что-то не так с
команда
Я использую? Должен ли контейнер останавливаться, как только останавливается Nginx? (может быть, что-то не так с основным процессом?)
- Почему Nginx останавливается нерегулярно? Почему не каждые 6 часов? Вы видите разницу между первым логом и вторым/третьим?
- Есть ли у вас какие-либо другие предложения, как я могу перезагрузить Nginx? (как упоминалось выше, мне ничего не нужно на хосте + я не хочу комбинировать контейнеры nginx и certbot, если в этом нет необходимости...)
Спасибо за помощь!