2025年12月22日月曜日

【Azure】1台構成でも「セッションアフィニティ」は必須?ログイン消失問題のドタバタ解決記

 



最近AzureAppServiceを使ってサイト構築をしているのですが、

色々新しい学びがあり、楽しんでいます。


そこで、最近あった事象について共有したいと思います。


AzueのApp Serviceというのは、MicrosoftのクラウドサービスであるAzureが提供するPaaS環境で、要はOSのことを意識しないで、自分が作ったアプリを乗せることができる環境です。

そこにwebアプリとして.net coreで作った会員管理システムをリリースしました。

ログイン後、メニュー画面に遷移した瞬間に

未ログイン状態に戻されたり、404エラーがでたりしていました。


最初はアプリが落ちてしまったのか、サーバーが落ちてしまったのか、と考えたのですが、ログには例外エラーは出ておらず、原因不明でした。


調べていると、app serviceを複数使っていて、その前段にAGW

Azure Gatewayがあると、「セッションアフィニティ」を有効にするのが良いらしい、というところまでは調べました。


ただ、今回はapp serviceは一つしか使っておらず関係ないかな、思っていました。



しかし、一つでも、AGWがいる場合や、App Service側の内部プロセスが再起動した際、アフィニティCookieARRAffinity)がないとセッション情報の解読に失敗することがあるらしく、onにすることで改善しました。



Cookieの暗号化対応で、以前、暗号化キーの保存対応を行なったことがあったのですが、それをすればセッションも維持されるのでは、と勝手に考えていました。



AGWがいる場合や、App Service側の内部プロセスが再起動した際、アフィニティCookie(ARRAffinity)がないとセッション情報の解読に失敗することがあるようです。



解決した手順

1. Azure Portalでの設定:

• App Service > 構成 > 全般設定 > セッションアフィニティを「オン」にする。

※ Linux版では「セッションアフィニティプロキシ」という項目もあり、混乱しやすいので注意。

2. ブラウザの掃除:

• 古い鍵で暗号化されたCookieが残っているとエラーが続くため、一度ブラウザのCookieを全削除して再ログイン。


まとめ

• 「インスタンスが1台だからアフィニティは不要」という先入観は危険。

• 特にAGWなどのプロキシを挟む構成では、迷わず「オン」にすべき。

• まずはログストリームを見て 問題が出ていないか確認しよう。


、、、、ずっとモヤモヤしていたのですが、

アフィニティ

とは?

「アフィニティ(Affinity)」は、人や物に対する「親近感」「好意」「相性」「一体感」「類似性」などを意味する言葉

うーん。
どれの意味かな、、、

これかな


セッション アフィニティ ( セッション永続化 または スティッキー セッションとも呼ばれます) は、クライアントの要求が常に同じサーバーに送信されるように負荷分散で使用される手法です。

無理矢理訳すなら、セッション一体感、、、?

これが、インフラチームから渡された時はoffだったかな、

これはハマりますね、、、

皆さんがazureでサイト構築する場合は、ぜひお気をつけてください。