すべてのリクエストにSSLを使用するWebアプリケーションをセットアップしています。スケーリングの余地があり、可用性も高い必要があります。これを処理するための「推奨される」方法は、HA用のレイヤー4ロードバランサーのペアをセットアップすることであるようです。これはSSL復号化のためにサーバーのファームに渡され、次にレイヤー7ロードバランサーのファームに渡されます。最後にWebサーバーに。 (参照: http://1wt.eu/articles/2006_lb/index_09.html )
私は過去にHAProxyを使用したことがあるので、このような設定で試してみました。基本的に私はHAProxy in TCP mode => STunnel => HAProxy in HTTP mode => Apache
。これを行ったとき、Apacheで使用可能なクライアントIPは2番目のHAProxyサーバーのIPでした。 STunnelにX-Forwarded-Forヘッダーを追加させることでこれをわずかに改善できましたが、それでは最初のHAProxyサーバーのIPアドレスしか得られませんでした。 Apacheに元のクライアントのIPアドレスを知らせる方法を見つけることができませんでした。
私が読んだドキュメントに基づくと、HAProxyがtcpモードで元のクライアントのIPアドレスを通過できるとは思いません。あれは正しいですか?もしそうなら、これを行うことができるオープンソースのソフトウェアロードバランサーはありますか?そうでない場合、できる商用/ハードウェアロードバランサーはありますか?
このロードバランサーは、厳密にはレイヤー4ロードバランサーである必要はないことにも注意する必要があります。 SSLトラフィックをSTunnel(またはSSL復号化に使用することになったもの)に渡すことができる必要があります。
ちなみに、レイヤー4ロードバランサーなしでセットアップしてみました(つまり、STunnelはチェーンの最初の部分です)。これにより、クライアントIPの問題が解決しました。ただし、上記の記事で予測したように、STunnelがボトルネックでした。 1秒あたり500から600リクエストの間のどこかでリクエストを失い始めました。そしてもちろん、これは(HAを維持しながら)ボックスを追加するだけでは拡張できません。私が与えられた要件に基づいて、このアプリは毎秒1000-5000リクエストのピークトラフィックを処理できるはずです。
LVSを調べることを強くお勧めします。 http://www.linuxvirtualserver.org/
通常のNATルーティングだけでなく、クライアントに直接送り返すIPトンネリングと直接ルーティングも実行できます。
F5のBigIPは、非常にうまく機能する商用ソリューションです。 X-Forwarded-Forは、httpプロファイルオプションとして実装されます。でも安くはありません。
Apache TrafficServerは、X-Forwarded-Forヘッダーを挿入するように設定でき、費用はかかりません。私はそれを使ったことがありませんが、構成変数があります:proxy.config.http.append_xforwards_header
ご覧になったことはありますか: http://httpd.Apache.org/docs/2.3/mod/mod_remoteip.html これはX-Forwarded-forヘッダーに基づいてIPを書き換えます。