ssl、ローカルセッション、および負荷分散に関して、相互に関連していると思われる質問がたくさんあります。そのため、この質問については、事前にお詫び申し上げます。
ファイルベースのセッションを使用するWebサイトがあります。サイトの性質はほとんどがhttpですが、一部のセクションはsslです。現在、ファイルベースのセッションのため、sslリクエストは以前のhttpリクエストと同じサーバーにヒットする必要があります。
時間の制約のため、増加したhttpおよびsslトラフィックの負荷を分散するために、可能な限り簡単なことをしたいと考えています。
スティッキーロードバランシングアルゴリズムには2つのオプションがあるようです。
- IPベース
- クッキーベース
IPベースのソリューションはおそらく機能しますが、ハッシュアルゴリズムは、サーバーがダウンしたり追加されたときにユーザーが移動するサーバーを変更する可能性があります。これは、現在のファイルベースのセッション設定では望ましくありません。また、ユーザーがWebサイトを閲覧しているときに、IPを合法的に変更することは技術的には可能だと思います。
cookieベースのアルゴリズムはより良いように見えますが、sslで暗号化されたときにcookieを検査できないことは、それ自体に問題があるようです。
私はsslを負荷分散する方法の例を探していましたが、cookieベースの負荷分散を実行でき、別のsslデコーダーを追加することで増加したssl負荷を処理できる設定の明示的な例を見つけることができません。
私が見たほとんどの明示的な例では、ブラウザークライアントとロードバランサーの間にsslデコーダー(通常はハードウェア、apache_mod_ssl、またはnginx)があります。通常、例には次のようなものがあります(http://haproxy.1wt.eu/download/1.3/doc/architecture.txtから変更)。
192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | +-+-+ +-+-+ +-+-+ +-+-+ +-+-+ | LB1 | | A | | B | | C | | D | + ----- + + --- + + --- + + --- + + --- + Apache 4の安価なWebサーバー mod_ssl ハプロキシ
上記の例のsslデコード部分は、水平方向にスケーラブルではない潜在的なボトルネックのようです。
私はhaproxyを見ました、そしてそれはあなたが複数のsslデコーダを持つことを可能にするこのような何かを可能にする 'mode tcp'オプションを持っているようです:
ハプロキシ | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
ただし、そのような設定では、haproxyがsslをデコードしていないため、クライアントIPが失われるようです:https ://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -ために
私もnginxを見てきましたが、水平方向にスケーラブルなsslデコーダーの明示的な例も見ていません。潜在的なボトルネックとしてnginxを持つ人々の多くの例があるようです。そして、少なくともこのリンクは、nginxが「TCP接続をバックエンドに透過的に渡すことをサポートしていない」と言ってIPを失うような、proxyのような設定のオプションさえないことを示唆しているようです。Apacheを渡す方法nginxプロキシを介したSSLトラフィック?。
質問:
- 増加したトラフィックに対処するために、より多くのsslデコーダーを追加するセットアップの例が他にないように思われるのはなぜですか?
- これは、sslのデコード手順が理論上のボトルネックにすぎないためであり、実際には、1つのデコーダーで、とんでもないトラフィックがあるサイトを除いて、基本的に十分でしょうか?
- 頭に浮かぶもう1つの考えられる解決策は、sslの必要性が高まっている人は、中央のセッションストアも持っているため、クライアントが連続するリクエストでどのWebサーバーにヒットするかは関係ありません。次に、すべてのWebサーバーでmod_sslまたは同等のものを有効にします。
- 上記のhaproxyソリューションは(クライアントIPの問題以外に)機能しているように見えますが、クライアントIPを維持しながらデコーダーの数を増やすことで機能する、粘着性のあるCookieベースのソフトウェアロードバランサーソリューションに出くわすか、技術的にはそうではない可能性があります。可能(クライアントIPを取得するにはリクエストをデコードする必要があるため、この場合、デコーダーのボトルネックが発生します)。
私が言ったことすべてが真実であると仮定すると、これらは私の選択肢のようです:
- IPハッシュを使用します(IPを正当に変更する可能性のあるユーザー、およびサーバーの追加と削除のシナリオには不適切です)
- nginxまたはmod_sslを、ssl要求に触れる最初のプログラムとして使用します。これは、潜在的なsslデコードのボトルネックになります。
- ssl要求に触れる最初のプログラムとしてhaproxyを使用し、水平方向のsslスケーラビリティーを獲得しますが、ssl要求のWebサーバーレベルでログに記録されたIPはありません(おそらく一時的にOK)
- 長期的には、モバイルまたは集中型のセッションストアに移行し、スティッキーセッションを不要にします