certbotとngixの競合でnginxが勝手に落ちる不具合の解消

概要

・certbotがnginxを殺してた
・設定ミスがありcertbotが更新にコケていた
・crontabを使用していたが、更新用のdaemonが裏で動いていて、予期せぬ時刻に障害が発生した


目次


事の発端

ある日、自宅のサーバで運用しているWebページが落ちていることに気がつき、 その理由を探ったところ、SSLアクセラレータとして使っているnginxのサービスが停止しているようだった。

落ちてから1時間ぐらいすると生き返ると言う状況から当初はリソース不足かと思い、VMのメモリ割り当てを4GBまで増やして再起動したところ正常に復旧した。

しかし、翌日またnginxが落ちておりヤケクソでvCPUを8コア/メモリ割り当てを64GBにしたが、nginxは落ちてしまった。

原因究明

/var/log/messages/ を見たら速攻で分かった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Apr 24 10:22:23 *hostname* systemd[1]: Starting This service automatically renews any certbot certificates found...
Apr 24 10:22:24 *hostname* certbot[99744]: Saving debug log to /var/log/letsencrypt/letsencrypt.log
Apr 24 10:22:24 *hostname* certbot[99744]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apr 24 10:22:24 *hostname* certbot[99744]: Processing /etc/letsencrypt/renewal/*****.conf
Apr 24 10:22:24 *hostname* certbot[99744]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apr 24 10:22:25 *hostname* certbot[99744]: Certificate not yet due for renewal
Apr 24 10:22:25 *hostname* certbot[99744]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apr 24 10:22:25 *hostname* certbot[99744]: Processing /etc/letsencrypt/renewal/*****.conf
Apr 24 10:22:25 *hostname* certbot[99744]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Apr 24 10:22:27 *hostname* systemd[1]: Stopping The nginx HTTP and reverse proxy server...
Apr 24 10:22:27 *hostname* systemd[1]: nginx.service: Deactivated successfully.
Apr 24 10:22:27 *hostname* systemd[1]: Stopped The nginx HTTP and reverse proxy server.
Apr 24 10:22:27 *hostname* systemd[1]: nginx.service: Consumed 26.757s CPU time.
Apr 24 10:22:27 *hostname* certbot[99744]: Renewing an existing certificate for *****

certbotが証明書を更新する際にnginxが落とされていた。
しかも悪いことに証明書の更新にコケて固まっていた模様。(しばらくするとタイムアウトになってnginxが甦生される)

証明書の更新にコケた理由

certbotが延々と遅延していた理由としては、firewalldの設定が間違っていて80番ポートが塞がっていたのでACMEチャレンジで延々と待たされていただけのようであった。

予期せぬタイミングで動作したcertbot

自分の場合、certbotは毎月1日の午前3時に動かすようcrontabを組んでいたが何故か4/24にも障害が発生。
こちらも気になったので調査してみた。

その結果、certbot-renew.timerというサービスが存在している事が判明。

対策

firewalldの設定変更

以下のコマンドで80番を穴開け

1
2
sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --reload

crontabからcertbot-renew.timerへの切り替え

今回は何故かcrontabの方にしか設定していないpre-hookpost-hookが動いていたようだが、この際なのできちんと設定を行っておく

/etc/sysconfig/certbot ファイルをお好みのエディタで開いてPRE_HOOKPOST_HOOKの行を以下の通り書き換えればOK

1
2
PRE_HOOK="--pre-hook 'systemctl stop nginx'"
POST_HOOK="--post-hook 'systemctl restart nginx'"

最後にcertbot-renew.timerを再起動しておく

1
systemctl restart certbot-renew.timer

参考文献

【簡単】Let’s Encryptの自動更新をcronなしで実現しよう | TACK-WEB

certbotとngixの競合でnginxが勝手に落ちる不具合の解消

https://lunatic.red/2024/04/25/certbotとngixの競合でnginxが勝手に落ちる不具合の解消/

Author

fuchse-ohren

Posted on

2024-04-25

Updated on

2026-03-11

Licensed under

コメント