certbotとngixの競合でnginxが勝手に落ちる不具合の解消
概要
・certbotがnginxを殺してた
・設定ミスがありcertbotが更新にコケていた
・crontabを使用していたが、更新用のdaemonが裏で動いていて、予期せぬ時刻に障害が発生した
目次
事の発端
ある日、自宅のサーバで運用しているWebページが落ちていることに気がつき、 その理由を探ったところ、SSLアクセラレータとして使っているnginxのサービスが停止しているようだった。
落ちてから1時間ぐらいすると生き返ると言う状況から当初はリソース不足かと思い、VMのメモリ割り当てを4GBまで増やして再起動したところ正常に復旧した。
しかし、翌日またnginxが落ちておりヤケクソでvCPUを8コア/メモリ割り当てを64GBにしたが、nginxは落ちてしまった。
原因究明
/var/log/messages/ を見たら速攻で分かった。
1 | Apr 24 10:22:23 *hostname* systemd[1]: Starting This service automatically renews any certbot certificates found... |
certbotが証明書を更新する際にnginxが落とされていた。
しかも悪いことに証明書の更新にコケて固まっていた模様。(しばらくするとタイムアウトになってnginxが甦生される)
証明書の更新にコケた理由
certbotが延々と遅延していた理由としては、firewalldの設定が間違っていて80番ポートが塞がっていたのでACMEチャレンジで延々と待たされていただけのようであった。
予期せぬタイミングで動作したcertbot
自分の場合、certbotは毎月1日の午前3時に動かすようcrontabを組んでいたが何故か4/24にも障害が発生。
こちらも気になったので調査してみた。
その結果、certbot-renew.timerというサービスが存在している事が判明。
対策
firewalldの設定変更
以下のコマンドで80番を穴開け
1 | sudo firewall-cmd --permanent --zone=dmz --add-service=http |
crontabからcertbot-renew.timerへの切り替え
今回は何故かcrontabの方にしか設定していないpre-hookとpost-hookが動いていたようだが、この際なのできちんと設定を行っておく
/etc/sysconfig/certbot ファイルをお好みのエディタで開いてPRE_HOOKとPOST_HOOKの行を以下の通り書き換えればOK
1 | PRE_HOOK="--pre-hook 'systemctl stop nginx'" |
最後にcertbot-renew.timerを再起動しておく
1 | systemctl restart certbot-renew.timer |
参考文献
certbotとngixの競合でnginxが勝手に落ちる不具合の解消
https://lunatic.red/2024/04/25/certbotとngixの競合でnginxが勝手に落ちる不具合の解消/