Server-ul:
Folosesc Nginx ca un proxy de intrare pentru serverul meu. Nginx rulează într-un container Docker.
docker-compose.yml:
nginx_ingress:
imagine: nginx:latest
porturi:
- „80:80”
- „443:443”
retele:
nivel frontal: {}
nivelul din spate:
adresa_ipv4: 172.28.1.1
reporniți: întotdeauna
volume:
- /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
comandă: „/bin/sh -c „în timp ce :; dormi 6 ore și așteaptă $${!}; nginx -s reîncărcare; terminat & nginx -g \"daemon off;\"'"
Deoarece gestionez mai multe certificate cu un alt container, vreau ca Nginx să reîncarce cu grație configurația la fiecare 6 ore.
Ideea este că îmi pot gestiona toate certificatele independent cu un alt container. Nu vreau să ruleze nimic pe gazda mea (fără cronjob) și nu vreau să combin containerul meu nginx-proxy-container cu containerul meu de certificat. Vreau ca fiecare piesă a puzzle-ului să ruleze independent.
(Am primit ideea din acest tutorial: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)
Problema:
Uneori, proxy-ul (nginx) nu mai funcționează. În timp ce containerul Docker în sine continuă să ruleze.
Jurnalele arată următoarele:
...
25/10/2021 05:51:42 [notificare] 1#1: semnal 3 (SIGQUIT) primit, închidere
25/10/2021 05:51:42 [notificare] 12#12: închidere grațioasă
25/10/2021 05:51:42 [notificare] 12#12: ieșire
25/10/2021 05:51:42 [notificare] 13#13: închidere grațioasă
2021/10/25 05:51:42 [notificare] 12#12: ieșire
25/10/2021 05:51:42 [notificare] 13#13: ieșire
25/10/2021 05:51:42 [notificare] 13#13: ieșire
25/10/2021 05:51:42 [notificare] 1#1: semnalul 17 (SIGCHLD) primit de la 12
25/10/2021 05:51:42 [notificare] 1#1: procesul de lucru 12 a ieșit cu codul 0
25/10/2021 05:51:42 [notificare] 1#1: procesul de lucru 13 a ieșit cu codul 0
2021/10/25 05:51:42 [notificare] 1#1: ieșire
2021/10/25 05:51:44 [notificare] 1#1: folosind metoda evenimentului „epoll”
2021/10/25 05:51:44 [notificare] 1#1: nginx/1.21.3
25/10/2021 05:51:44 [notă] 1#1: construit de gcc 8.3.0 (Debian 8.3.0-6)
25/10/2021 05:51:44 [notificare] 1#1: OS: Linux 5.4.0-86-generic
2021/10/25 05:51:44 [notificare] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
25/10/2021 05:51:44 [notificare] 1#1: începeți procesele lucrătorilor
2021/10/25 05:51:44 [notificare] 1#1: începeți procesul lucrătorului 9
2021/10/25 05:51:44 [notificare] 1#1: începe procesul lucrătorului 10
Cu uneori Adică uneori. Nu am reușit să deslușesc niciun model până acum. Mai întâi am crezut că Nginx se închide la fiecare 6 ore din cauza comanda
. Dar se pare că nu este cazul. Am redus timpul de somn la 2 minute și Nginx a continuat să funcționeze bine ore în șir. Apoi am setat din nou timpul de somn la 6 ore și exact 6 ore mai târziu, Nginx a încetat să funcționeze (vezi jurnalul de mai sus). Am repornit containerul Docker și de atunci Nginx rulează (au trecut mai mult de 24 de ore acum). După cum puteți vedea în următoarele jurnale, în majoritatea cazurilor reîncărcarea Nginx funcționează perfect:
...
2021/10/25 11:51:44 [notificare] 19#19: procesul de semnal a început
2021/10/25 11:51:44 [notificare] 1#1: semnal 1 (SIGHUP) primit de la 19, reconfigurare
2021/10/25 11:51:44 [notificare] 1#1: reconfigurare
2021/10/25 11:51:44 [notificare] 1#1: folosind metoda evenimentului „epoll”
2021/10/25 11:51:44 [notificare] 1#1: începeți procesele lucrătorilor
2021/10/25 11:51:44 [notificare] 1#1: începeți procesul lucrătorului 21
2021/10/25 11:51:44 [notificare] 1#1: începe procesul lucrătorului 22
2021/10/25 11:51:44 [notificare] 10#10: închidere grațioasă
2021/10/25 11:51:44 [notificare] 9#9: închidere grațioasă
2021/10/25 11:51:44 [notificare] 10#10: ieșire
2021/10/25 11:51:44 [notificare] 9#9: ieșire
2021/10/25 11:51:44 [notificare] 9#9: ieșire
2021/10/25 11:51:44 [notificare] 10#10: ieșire
25/10/2021 11:51:44 [notificare] 1#1: semnalul 17 (SIGCHLD) primit de la 10
2021/10/25 11:51:44 [notificare] 1#1: procesul de lucru 9 a ieșit cu codul 0
2021/10/25 11:51:44 [notificare] 1#1: procesul de lucru 10 a ieșit cu codul 0
2021/10/25 11:51:44 [notificare] 1#1: semnal 29 (SIGIO) primit
...
...
2021/10/25 17:51:44 [notificare] 23#23: procesul de semnal a început
25/10/2021 17:51:44 [notă] 1#1: semnal 1 (SIGHUP) primit de la 23, reconfigurare
25/10/2021 17:51:44 [notificare] 1#1: reconfigurare
2021/10/25 17:51:44 [notificare] 1#1: folosind metoda evenimentului „epoll”
2021/10/25 17:51:44 [notificare] 1#1: începeți procesele lucrătorilor
2021/10/25 17:51:44 [notificare] 1#1: începe procesul lucrătorului 25
2021/10/25 17:51:44 [notificare] 1#1: începe procesul lucrătorului 26
2021/10/25 17:51:44 [notificare] 22#22: închidere grațioasă
2021/10/25 17:51:44 [notificare] 21#21: închidere grațioasă
2021/10/25 17:51:44 [notificare] 21#21: ieșire
25/10/2021 17:51:44 [notificare] 22#22: ieșire
25/10/2021 17:51:44 [notificare] 21#21: ieșire
25/10/2021 17:51:44 [notificare] 22#22: ieșire
2021/10/25 17:51:44 [notificare] 1#1: semnalul 17 (SIGCHLD) primit de la 21
2021/10/25 17:51:44 [notificare] 1#1: procesul de lucru 21 a ieșit cu codul 0
25/10/2021 17:51:44 [notificare] 1#1: semnal 29 (SIGIO) primit
2021/10/25 17:51:44 [notificare] 1#1: semnalul 17 (SIGCHLD) primit de la 22
25/10/2021 17:51:44 [notificare] 1#1: procesul de lucru 22 a ieșit cu codul 0
25/10/2021 17:51:44 [notificare] 1#1: semnal 29 (SIGIO) primit
...
Intrebarile mele:
- Este ceva în neregulă cu
comanda
Eu folosesc? Ar trebui să se oprească containerul de îndată ce se oprește Nginx? (Poate ceva în neregulă cu procesul principal?)
- De ce se oprește Nginx doar neregulat? De ce nu la fiecare 6 ore? Vedeți vreo diferență între primul log și al doilea/al treilea?
- Aveți alte sugestii cum aș putea face Nginx să se reîncarce singur? (după cum am menționat mai sus, nu vreau nimic pe gazdă + nu vreau să combin containerele nginx și certbot dacă nu este cu adevărat necesar...)
Vă mulţumesc pentru ajutor!