タイトルのまんまです。
Nginxでリバプロしてる環境でLet's Encryptを使おうと思うと、その仕組み上ちょっとめんどくさいのでメモ。
結論から言うと、設定ファイルに以下を追記すると良い。
location ^~ /.well-known/acme-challenge/ {
root /usr/share/nginx/html/.well-known;
}
以下、適当に解説。
Let's Encryptの場合、./letsencrypt-auto certonly --webroot -w {$document_root} -d example.com
ってな具合で証明書を発行すると思うんだけど、その際にドキュメントルートに認証用のファイルを作成していて、その認証用ファイルをチェックした上で証明書が発行される。
この場合だとexample.com/.well-known/acme-challenge/
にGETリクエストが来る。
リバプロしているからそのままバックエンドにGETリクエストが飛ぶわけだけど、バックエンドにそんなURIは存在しないので、認証用ファイルのチェックが出来ずに証明書の発行に失敗する。
なので、Location
ディレクティブを使って/.well-known/acme-challenge/
のドキュメントルートを設定してあげるとうまくいくという仕組み。
あ、それ用のディレクトリはちゃんと掘ってあげてください。
所有者の変更も忘れずに。