Debian9+nginx1.14.0
##問題
Let'sEncryptの自動更新をcertbotコマンドの--webroot
で行っていたが
次のようなエラーが出ていることに気付いた。
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: example.com
......
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
##解決
運用しているドメインは2つ。
certbotは複数ドメインがあっても自動で全部確認してくれるが、
そのうち片方の.confファイル(nginx)に認証用のコードが抜けていた
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
server_tokens off;
}
httpsにリダイレクトするようにしていた。
この機能は残したいので
server {
listen 80;
server_name example.com;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /home/user/somedir;
}
location / {
return 301 https://$host$request_uri;
}
server_tokens off;
}
^~
は前方一致なので/.well-known/acme-challenge/
から始まるパスで更新のアクセスがあればそれ用のrootへ誘導する。.well-known/~
というのはcertbotのコマンドで指定により自動で作られるらしい。
それ以外はリダイレクト。
sudo service nginx restart
して
certbotの動作確認
certbot renew --dry-run --webroot --webroot-path /home/user/somedir --post-hook "service nginx reload"
- DRY RUN: simulating 'certbot renew' close to cert expiry
- (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
/etc/letsencrypt/live/some.example.com/fullchain.pem (success)
これで大丈夫だと思う。
###参考
Let's encrypt のWeb認証に失敗する場合の許可の通し方
話題の無料SSL証明書!Let’s Encryptで証明書の取得に失敗したときに確認すること
nginx連載5回目: nginxの設定、その3 - locationディレクティブ