久々に技術ネタです。
EC2のElastic Load Balancing便利ですねー。とっても便利です。
何が便利かってSSLをロードバランサーに設定出来るんですね。なので、いちいちインスタンス側に設定しなくてもすみます。
具体的にはまず80番ポートだけでELBを作ります。このあたりはググればすぐ出てくるので割愛します。
次にSSLの設定を行うんですが、CSRの生成とかもよくある話なので飛ばします。
EC2マネージメントコンソールのLoad Balancersから対象のロードバランサーを選択後ListenerからSSLの設定を行います。
- Load Balancer ProtocolにHTTPS(Secure HTTP)を選びます
- Load Balancer Portは443のまま
- Instance ProtocolはHTTPでInstance Portは80番のままでOKです
- Cipherは必要に応じて設定してください
- そしてSSL Certificateに鍵を設定します
最初はSSL証明書やキーファイルなどをアップロードしてください。
これだけでSSLの設定完了です。
あとはWebサーバー側のnginxの設定を変えるのみです。
問題点としてELBでSSLを設定してしまうとnginx側ではhttpsもhttpも同じ80番で入ってきてSSLかどうかが区別できなくなります。今までは80番と443番でリダイレクトの挙動を変えていた場合はつらいですね。
どうやって解決するかというとELBにSSLを設定してポートフォワードした場合環境変数に
「X-Forwarded-Proto」がセットされます。
nginx側では$http_x_forwarded_protoで取得できるので
例えばトップページはSSLにしたくない場合だと
[sourcecode]
location = / {
if ($http_x_forwarded_proto = “https”) {
rewrite ^(.*) http://$server_name$1
break;
}
proxy_pass http://backend/;
}
[/sourcecode]
こんな感じで書けばOKです。
簡単でしょ?
ぜひみなさんもEC2をお使いの際はELBをお使いください
コメント