1台環境では正常動作しますが、awsの二台環境になると、
正常動作しなくなります。
具体的には、以下です。
1.ユーザーが帳票ダウンロードリンククリック
2.初回アクセスの場合は、認証サイトにリダイレクトします。
また同時にリクエストパラメータにどの帳票を出すかの情報がある為、
リクエストパラメータをセッションに保存します。
3.認証サイトにて無事認証を済ましたユーザは、
コールバックにより元のサイトに戻ってきます。
4.元サイトでは、2のセッションから、どの帳票を表示するか決定します。
かつ、セッションの再生成をします。
合わせて、oauthのトークンもセッションに保持します。
5.続けてさらに、認証サーバ側にある帳票データを取得する為
restリクエストをします。
データが仮に一万件あった場合、2000件を5回リクエストします。
問題は、この5回に分けたリクエストで発生します。
本来、リクエストを発信したaサーバに、5回全て
受け取りたいですが、負荷分散され、a.bサーバどちらにも
リクエストが流れてしまいます。
4のセッション再生成でこのような挙動が起こるかもしれませんが、
認識前と後で、セッションid固定攻撃による脆弱性回避の為
必要な処理になります。
ロードバランサにおいて、アプリケーションによるセッション維持をしていますが、
この場合は、ロードバランサによるセッション維持であれば、
正常動作になりますでしょうか。
または、悪い箇所教えていただきたいです。
ロードバランサの設定を変えるのが色々あり、容易ではないため、
すみませんが、理論上うまくいくかを分かった上で
進められれば理想的である為、お知恵ある方いらっしゃいましたら、
ご回答いただければ幸いです。
という前提でのコメントです。
phpでのセッション管理は/var/lib/php/session内のファイルで行われているので異なるサーバーにリクエストが流れてしまうとセッションが切れることになります。そのためNFSで共有する。session_set_save_handlerでdbサーバなどに保存する。などでa.bサーバでの保存先を同一にする必要があります。
http://www.kumoyanet.com/180/
では一定時間同じサーバーにリクエストが流れるということで保存先を同一にするということを実現しているのだと思います。
言語はjavaでapache tomcatですが、
phpでセッション共有するように、
http://weblabo.oscasierra.net/tomcat-cluster-session-replication-know-how/
のような設定が必要になりそうな気がしました。
ロードバランサだけでは、できるものかと考えてましたが、そうではなさそうな気がしました。