くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

Windows8.1

ロードバランサ cookieが消える その4(最終回)

その1その2その3 の最終回。

前回までのあらすじ。

  1. IE11+Windows8.1の環境下でロードバランサ使ってると、つながってるサーバが唐突に変わる事象が起きる
  2. 調べてみるとCookieを使用したロードバランシングをしていると、ロードバランサが採番したセッションCookieのキーが唐突に変わることがある
  3. Win8.1以降のOSの場合、ピン留め機能のために定期的にサイトのルートへ「Get browserconfig.xml」というHTTPリクエストを発行している模様
  4. このリクエストにロードバランサのCookieがついてない
  5. ロードバランサが初回のアクセスと勘違いしてバランシングして別サーバに飛ばされるっていう原因
  6. ブラウザの保護モードを有りにするとこのリクエストにCookieをつけるようになる ←イマココ

で、保護モードを有効にするためにはUACが有効になってる必要があるようなのでUACを有効にする。

そしたら今度はIE11のエンタープライズモードが有効にならない事がわかった。あーあと、こんな古臭いことやってる人はいないと思いますが、IEのDLLホスティング使ってると、おおむね動くんだけど、保護モードで動かすと、特定のライブラリ読み込むときに、クライアント側で動的コンパイルしてるらしく、そのDLLの出力先の整合性が取れてない感じがして、変な例外が裏で発生する。IEのバグなのかしら?

とゆーことで保護モードを有効にして回避することはできませんでした。あ、自分が使うときはIE11のエンタープライズモードで動かさないとダメなもんで。

もーどうしよーもなし。IPでのバランシングに変えるしかない。NATとか使ってたら詰むね。。。

サイトのHTML直せるなら、METAタグで一個追加すればいけそうな気がする。MSDN的に。

<meta name="msapplication-config" content="none"/>

↑を入れれば、問題のリクエストをやめてくれるだろうか。

ロードバランサ cookieが消える その3

コレの続き。

保護モードにすれば、Cookieを付けてGetリクエスト出すよってMicrosoftのサポートに書いてあったのでやってみた。

やった結果。↓

①保護モードなし⇒cookie入ってない。

②保護モードあり⇒cookie入ってる。

サポート通りでした。とりあえず、保護モードつければロードバランサが急に別のサーバに飛ばすっていう動きはなくなった模様。

まだ、あんまり検証してないけど、割と大丈夫そう。。。

2016/10/23追記
管理者権限で実行したり、UACが無効になってると保護モードが効かないっぽ。

続き。

ロードバランサ cookieが消える その2

以前、ロードバランサ 突然別のサーバにつながる っていうのを書いた。これの続き。

別のサーバに突然飛ばされてるのは分かるんだけど、いかんせん原因がわからないので、パケットキャプチャして何が起きてるのか調べた。

そしたら、裏でこんな話になってましたとさ。

① サイトを操作中に裏で「GET /browserconfig.xml」っていうリクエストが飛んでる。
② ①のリクエストにCookieが何も設定されてない。
③ ①のレスポンスでCookieがないからロードバランサがサーバに振り分けてセッションCookieを採番。
④ 新しいCookieでつなぎにいって別のサーバに飛ぶ。

browserconfig.xmlってなんだ。。。。

コレらしい。要するに、Win8.1以降のピン留めに表示する画像とかもろもろをサイト側で指定出来るようにするための仕組みの模様。

ふーむー。機能としては素晴らしいんだろーけど、cookie付けないのダメじゃね?と思ったら、Microsoftのサポートにこんなエントリがあった。

信頼済みかイントラネットになってない奴はセッションCookieを飛ばさない。ということらしい。。。今度はコレを見てみましょう。

信頼済み・イントラネットじゃなくて保護モードかどうからし。 続き

問合せ