特に変更しないでも大丈夫かな、と思ってcertbot renew --dry-run --webroot-path
するも失敗したので、
Nginx+リバースプロキシ環境でWebサーバを停止させずに Let’s Encrypt (Certbot) のSSL証明書を自動更新するを参考に、自動更新できるようにした。
WEBルートとなるディレクトリに/.well-known/acme-challenge/
を作ってあげればそれで良し!なはずが、例によって嵌る。
まず、test.html
の生成から失敗。
$ sudo echo "nginx is awesome!" >/var/www/.well-known/test.html
-bash: /var/www/.well-known/test.html: 許可がありません
sudoでリダイレクトをしたいとき - Y’s noteを参考に↓とする。
$ sudo sh -c "echo 'nginx is awesome!'>/var/www/.well-known/test.html"
-bash: !': event not found
docs.oracle.com/cd/E19620-01/805-5837/msgs-266/index.htmlを見ても意味分からんかったが、とりあえずエスケープして解決。
$ sudo sh -c "echo \"nginx is awesome\!\" >/var/www/.well-known/test.html"
そして、http://example.f5.si/.well-known/test.html
でアクセスして nginx is awesome! が見えたら、とりあえずwebrootの生成、nginxの設定が正しいはずなのだけど、見えない。
これは、location ^~ /.well-known
ブロックに追記する設定を
server {
listen 443 default_server;
listen [::]:443 default_server;
https(443番port)側に書いていたため。
server {
listen 80;
listen [::]:80;
server_name example.f5.si;
location /.well-known {
root /var/www;
}
とすれば無事見えるようになった。確認が取れたのでtest.html
を削除する。そして、ルーターのhttp(80番port)を開いておけば、rootユーザーでcertbot renew --dry-run --webroot-path /var/www
として、サーバーの稼働中のまま証明書の更新が成功する。