Web技術の基礎
ロードバランサの後ろに3台のアプリケーションサーバを置き、リクエストを順番に各サーバへ振り分けている(ラウンドロビン)。ログインした利用者のセッションの情報は、ログインを処理したサーバのメモリだけに保存している。起こりやすい問題と対策の組み合わせとして、適切なものはどれか。
- Aほかのサーバに振り分けられるとセッションが見つからず、ログインが切れたように見える。セッションを全サーバが使える共有の場所に置く
- B3台のサーバが同じセッションIDを別々に発行して衝突する。セッションIDを短い連番にして、利用者がIDを覚えやすいようにする
- CロードバランサはCookieを読めないので、HTTPSが使えなくなる。ロードバランサとサーバの間の通信を暗号化しないようにする
答えと解説を見る
正解:A. ほかのサーバに振り分けられるとセッションが見つからず、ログインが切れたように見える。セッションを全サーバが使える共有の場所に置く
セッションの情報が1台のサーバのメモリにしかないと、次のリクエストが別のサーバに振り分けられたとき、そのサーバは利用者を見分けられません。対策の1つは、セッションを、どのサーバからも読み書きできる共有の記憶場所(インメモリのデータストアやデータベース)に置くことです。もう1つは、同じ利用者のリクエストを同じサーバに振り分け続けるセッション維持(スティッキーセッション)ですが、そのサーバが止まるとセッションが失われ、負荷も偏りやすくなります。サーバが状態を持たないようにしておくと、台数を増やしたり減らしたりしやすくなります。
- A. 正しい。共有の場所に置けば、どのサーバでも同じセッションを使えます。
- B. セッションIDは推測されないよう、十分に長いランダムな値にします。短くすると、なりすましの危険が高まります。
- C. セッションの問題とHTTPSは関係がありません。通信の暗号化をやめるのは、安全性を下げるだけです。