ELBが Proxy Protocol に対応したので検証してみた

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは、AWSテクニカルグループの山田です。

ELBで新たにProxy Protocol のサポートが加わり、HTTP(S)以外の接続でも接続元のIPが取得出来るようになったので早速検証してみました。

 

構成

今回は、新たに追加されたProxyProtocolPolicyを有効にしたELBに、ProxyProtocolモジュールを組み込んだNode.jsのWebサーバをアタッチして、接続元IP・接続元ポート・ELBのIPを表示するような構成にしています。

 

確認手順

まず、ELBのProxyProtocolを有効化するためにPolicyを作成します。

次に作成したPolicyをELBに適用します。

Policyが適用されているかどうか確認します。

これでELBの準備は完了です。

 

次にELBの配下で待ち受ける、node.jsサーバを用意します。

まず、node.jsに必要なパッケージをインストールします。

nvmのgithubのリポジトリをクローンしてsourceします。

nvmからnode.jsをインストールします。

proxy protocol用のモジュールをnpmでインストールします。

次に、node.jsのWebサーバを作成します。
このサーバは、ELBから8080番ポートへのTCP接続に対して、Proxy Protocol データを解析し、送信元IPとポートとELBのIPを表示するだけの、単純なNode.jsのサーバです。

上記のソースコードは、こちらのページにある(http://aws.typepad.com/aws/2013/07/elastic-load-balancing-adds-support-for-proxy-protocol.htmlelb-pp-app.zip の中の server.js を参考にしました。

Node.jsのサーバを起動します。

最後に、作成したNode.jsのWebサーバをELBへアタッチして、Listener Configurationを設定します。
Node.jsのWebサーバは8080ポートで待ち受けているので Instance Port は TCP:8080 にします。

 

確認

ELBにアクセスすると、Node.jsのWebサーバ が ProxyProtocol を解析して、送信元IP・ポート・ELBのIPが取得出来ているのが分かります。

最後に

Proxy Protocol はTCP上の任意のプロトコルで使うことが出来るので、これから様々な場面で活用できると思います。
ELBの可能性がこれでまた広がりましたね。

 

 

AWS運用自動化サービス「Cloud Automator」