今回はSSL(https)を使えるようにするような設定をnginxにしてみようと思います。
証明書の取得
本来はSECOMやVeriSign等に有料で証明してもらうのですが、今回は以前にも紹介したCACertを載せときます。
- CAcertから証明書をもらおう!(その0:紹介)
- CAcertから証明書をもらおう!(その1:アカウントの登録)
- CAcertから証明書をもらおう!(その2:鍵と申請書の作成)
- CAcertから証明書をもらおう!(その3:CAcertから証明書をもらう)
ということで、証明書の取得は省略します。とりあえず、サーバーの秘密鍵 server.key と サーバーの証明書 server.cer が手に入った事にします。
nginxに設定
nginxでの設定は簡単で、既存の設定をコピーして、80番ではなく443番に変更し、SSLを有効にしてサーバーの鍵・証明書のファイルを指定してあげるだけです。
ちょっとその部分だけ書いてみます。
server { listen 443 default_server ssl; server_name _; ssl_certificate /keys/server.cer; ssl_certificate_key /keys/server.key; location / { この辺は適当に } }
リバースプロキシとしてnginxとして使っている場合も同様です。
名前ベースのバーチャルホストを使っている場合
ドメイン名を複数つかってバーチャルホストを使っている場合もあると思います。SSLではアクセスされたサーバー名がわかる前に証明書を渡さなければならないので、名前ベースのバーチャルホストでSSLは利用できませんでした。
が、SNI(Server Name Indication)というプロトコル拡張ができたので、名前ベースのバーチャルホストでも可能になりました。(ブラウザによっては対応してません)
設定は簡単で、httpと同じくserver_nameを設定するだけです。
リバースプロキシとして使っている場合は、証明書を変えるために、バーチャルホストの数だけServerディレクティブを作ってあげてください。