最近AzureのAppServiceを使ってサイト構築をしているのですが、
色々新しい学びがあり、楽しんでいます。
そこで、最近あった事象について共有したいと思います。
AzueのApp Serviceというのは、MicrosoftのクラウドサービスであるAzureが提供するPaaS環境で、要はOSのことを意識しないで、自分が作ったアプリを乗せることができる環境です。
そこにwebアプリとして.net coreで作った会員管理システムをリリースしました。
ログイン後、メニュー画面に遷移した瞬間に
未ログイン状態に戻されたり、404エラーがでたりしていました。
最初はアプリが落ちてしまったのか、サーバーが落ちてしまったのか、と考えたのですが、ログには例外エラーは出ておらず、原因不明でした。
調べていると、app serviceを複数使っていて、その前段にAGW
Azure Gatewayがあると、「セッションアフィニティ」を有効にするのが良いらしい、というところまでは調べました。
ただ、今回はapp serviceは一つしか使っておらず関係ないかな、思っていました。
しかし、一つでも、AGWがいる場合や、App Service側の内部プロセスが再起動した際、アフィニティCookie(ARRAffinity)がないとセッション情報の解読に失敗することがあるらしく、onにすることで改善しました。
Cookieの暗号化対応で、以前、暗号化キーの保存対応を行なったことがあったのですが、それをすればセッションも維持されるのでは、と勝手に考えていました。
AGWがいる場合や、App Service側の内部プロセスが再起動した際、アフィニティCookie(ARRAffinity)がないとセッション情報の解読に失敗することがあるようです。
解決した手順
1. Azure Portalでの設定:
• App Service > 構成 > 全般設定 > セッションアフィニティを「オン」にする。
※ Linux版では「セッションアフィニティプロキシ」という項目もあり、混乱しやすいので注意。
2. ブラウザの掃除:
• 古い鍵で暗号化されたCookieが残っているとエラーが続くため、一度ブラウザのCookieを全削除して再ログイン。
• 「インスタンスが1台だからアフィニティは不要」という先入観は危険。
• 特にAGWなどのプロキシを挟む構成では、迷わず「オン」にすべき。
• まずはログストリームを見て 問題が出ていないか確認しよう。