Craftworks Tech Blog - Branch このページをアンテナに追加 RSSフィード Twitter

2010-09-20

EC2 のロードバランサーの内側の lighttpd で本来のアクセス元 IP アドレスを取得する方法

| 20:43 | EC2 のロードバランサーの内側の lighttpd で本来のアクセス元 IP アドレスを取得する方法を含むブックマーク EC2 のロードバランサーの内側の lighttpd で本来のアクセス元 IP アドレスを取得する方法のブックマークコメント

Amazon EC2ロードバランサーオプションの Elastic Load Balancing は便利なのですが、これを経由すると内側の lighttpdアクセスログにはアクセスIP アドレスは 10.204.xx.xx などと、全てロードバランサーIP アドレスになってしまいます。これを本来のアクセスしてきたユーザーのリモート IP アドレスを記録する方法を紹介します。

ロードバランサーアクセス元の IP アドレスを HTTP_X_FORWARDED_FOR ヘッダに付加して内側の Web サーバーにリクエストを送ります。

lighttpd ではこれを、mod_extforward により、リモート IP アドレスとして取り扱います。Apache でいうところの mod_rpaf にあたるものですね。

lighttpd.conf に下記のようにロードバランサーIP アドレスを指定すると、本来の IP アドレスを取得することができるようになります。

server.modules += ( "mod_extforward" )
extforward.forwarder = (
    "10.204.xx.xx" => "trust"
)

さらに内側のアプリケーションサーバーで Plack を使っている場合は、Plack::Middleware::ReverseProxy を利用しましょう。

トラックバック - http://d.hatena.ne.jp/Craftworks/20100920/1284983011
リンク元