久々に技術ネタです。
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にしたくない場合だと
location = / { if ($http_x_forwarded_proto = "https") { rewrite ^(.*) http://$server_name$1 break; } proxy_pass http://backend/; }
こんな感じで書けばOKです。
簡単でしょ?
ぜひみなさんもEC2をお使いの際はELBをお使いください
コメント