Azure AppGW の Cookie ベースのアフィニティ において、 Cookie の有効期限はいつまでか
Cookie の有効期限
Azure Application Gateway で Cookie ベースのアフィニティ で、 Cookie の有効期限はいつまでか、公開情報を探してみたのですが見つけられなかったため、検証して確認をしてみました。
Cookie ベースのアフィニティ って?
Application Gateway は、リスナー(フロントエンド IP アドレス、プロトコル、およびポート番号で構成)でクライアントからの要求を受け付けます。受け付けた要求は、リスナーに関連付けられているルーティング規則に沿って評価され、どのバックエンドプールに要求をルーティングするかが決まります。
バックエンドプール内にいくつか正常なバックエンドサーバーがある場合、基本的にはラウンドロビンで負荷分散が実行されます。
しかし、バックエンドのサーバーが変更されてしまうと(ラウンドロビンでは)困る場合があります。
そういった場合、Application Gateway で Cookie ベースのアフィニティを有効にすることで、Application Gatewayは、同じサーバーに転送して処理できます。
検証してみた
[ Application Gateway ] + [ Backend となる VM ] といった環境であれば、以下の公開情報を参照すれば手軽に作成することができます。
Cookie ベースのアフィニティは、Application Gateway を作成する途中、バックエンド設定を行う際に、 [ Cookieベースのアフィニティ] の項目がありますので、ここで有効化を選択すれば、利用することができます。
Application Gateway を作成済みの場合でも、同じく、バックエンド設定を掘っていくことで設定箇所に行くことができます。
なお、[ アフィニティCookie名 ] は何でもよいかとは思いますが、マルチサイトの場合には、同名Cookie名だと上書きされてしまうので、重複させないようにだけ気をつけます。
あとは、セッションアフィニティを有効化した Application Gateway のバックエンドとして、WebサーバIIS入りWindowsサーバーを配置したうえで、手元のPCからブラウザアクセスし、Cookieの有効期限を確認してみます。
確認結果
有効期限:ブラウザを閉じるまで有効、でした。
一応比較のため、期限があるサイト(例えば www.yahoo.co.jp )だと、以下とおり Cookie の有効期限がありますね。
Curl で取得した Cookie 内を確認する
PowerShell で Curl を実行し、Cookie 内の Expires の情報を確認する方法も記載しておきます。
こちらのサイトが非常に参考になりました ⇒ https://yomon.hatenablog.com/entry/2015/03/03/004652
$uri = "https://www.yahoo.co.jp"
Invoke-WebRequest -Uri $uri -SessionVariable mySession | Out-Null
$mySession.Cookies.GetCookies($uri)
やはり、Application Gateway が用いる cookie は Expire がなく、有効期限が設定されていないCookieであることがわかります。
こちらも比較サイトですが、しっかり Expire が設定されています。
参考リンク
Discussion