TumblrPocketAWSのELBを使用してSSLを通す場合、手段としては2通りあります。ProtocolをTCP:43とし、インスタンス側に証明書を設置するどちらをとっても問題なく動作しますが、通常は1)の方法を紹介されていることが多いように見えます。1)の方法をとると、インスタンス内に証明書を持っている必要が無いので、インスタンスの数を増やす場合(特にELBの機能であるAuto-Scalingを使用する場合)にAMIの内容や運用が少し簡略化されるということが考えられます。SSL証明書の契約内容によっては、1CPU1ライセンスの場合があるので、どんな場合でも1)でOK、というわけではないというのは以前書いた通りです。今回のお題としましては、ELB配下のインスタンス内でHTTPヘッダのX-Forwarded-Forを取得して使用したい、とした場合の問題です。ELBの配下のインスタンスから見た場合、HTTPヘッダのRemote-AddrはELBのローカルIPアドレスになります。単純にApacheを起動しただけでは、たとえばログの接続元IPアドレスの個所が(どこからのアクセスであろうとも)ELBになってしまうわけです。この問題については紹介記事などが世の中にも多々あり、解決策が示されていますので、ここでは割愛します。根本的には、「ELBがX-Forwarded-Forヘッダを送ってくるのでそれでどうにかする」ということになるのですが、ELBがX-Forwarded-Forを送出するには条件があり、つねに確実に受け取れるわけではありません。ドキュメントにもさりげなく書いてあります。アドレスを識別するのに役立ちます。ロードバランサーを使用する場合」というのは、冒頭の選択肢で言うと1)になりますので、この場合、1)を選択した方が良いということになります。実害があるのか?というと、構成や用途によるとは思いますが、少なくとも私は、TCP:443でバランスしたインスタンス内からmod_proxyで別インスタンスにリバースプロキシをかけた構成で、X-Forwarded-ForがELBのローカルIPアドレスのまま、という現象に数時間悩みました...。技術担当取締役を中心に技術者が書いております。プログラミング・サーバー/クラウド技術などについての小ネタから、システム化にまつわるあれこれや、プログラマー教育、そこから発生する様々な考え方などまでご紹介。