Let’s Encryptをサーバー停止せずに自動更新っ![Nginx]
前回、(WordPressをLet’s Encryptでhttpsにしたっ!)のエントリーでhttps化はできたんですが、このままだと90日後に証明書が失効してしまうので、自動更新をします。
よくある感じだと、Nginxを停止して、証明書を更新して、Nginxを起動するみたいなパターンがあるんですが、停止しなくても更新できるようなので、ダウンタイム無しで更新してみます。
普通にcertbot-autoを起動すると、こいつがWebサーバーとして80番をリッスンするので、Nginxを起動してるとエラーになるって話ですが、–webrootオプションを指定すると、チェック用のファイルを一時的に置いて、それを確認してOKなら発行みたいな流れになるぽいですね。
certbot用のwebrootの追加
mkdir -p /var/www/certbot/.well-known
ま、場所はどこでもいいんですが、上記のdirを追加しました。
Nginx設定(80番)
httpで公開していた時代のリンクが外部に残っているので、そちらはすべてhttpsにリダイレクトをしつつ、/.well-knownのアクセスだけはhttpで受け取れるようにしておきます。
server { listen 80; server_name blog.mitsuto.com; location /.well-known { root /var/www/certbot/; } location / { return 301 https://$host$request_uri; } }
動作確認
/var/lib/certbot-auto certonly --webroot -w /var/www/certbot/ -d blog.mitsuto.com --dry-run --post-hook "/sbin/service nginx reload"
–dry-runのオプションを付けて実行してみます。
–post-hookを指定すると、更新後に特定のコマンドが実行できるようなので、Nginxの再読み込みを指定。
crontabに設定
確認ができたので、crontabに設定します。
本来は90日に1回更新すればいいんですが、とりあえず月1回の更新で設定します。
(毎月1日3時30分に実行)
30 3 1 * * /root/certbot/certbot-auto certonly --webroot -w /var/www/certbot/ -d blog.mitsuto.com --force-renew --post-hook "/sbin/service nginx reload"
–dry-run を外して –force-renew を追加しました。
これで強制的に更新がかかります。
(–force-renewは週に20回制限らしいですのでご注意ください。)
ここまででWordPressのhttps化は完了ということで。
しばらく運用してみて何かあれば追記するかもしれませんがw
参考:Nginx+リバースプロキシ環境でWebサーバを停止させずに Let's Encrypt (Certbot) のSSL証明書を自動更新する – Qiita