Nginxでリバースプロキシしてる環境でLet's Encryptを使う

Posted by onodai.


タイトルのまんまです。
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/のドキュメントルートを設定してあげるとうまくいくという仕組み。
あ、それ用のディレクトリはちゃんと掘ってあげてください。
所有者の変更も忘れずに。

comments powered by Disqus