Azure Web App中ARR-Disable-Session-Affinity失效问题求助
问题分析与解决方案
你遇到的问题大概率是浏览器会话中的ARRAffinity Cookie缓存导致的,而非头配置失效。以下是具体原因和修复步骤:
核心原因
ARR实例亲和性依赖ARRAffinity Cookie实现:
- 首次请求时,ARR会生成该Cookie并返回给浏览器,后续请求浏览器会自动携带此Cookie,强制路由到同一实例。
- 即使你在后续响应中添加
ARR-Disable-Session-Affinity: True,只要浏览器还持有未过期的ARRAffinityCookie,ARR依然会按Cookie路由,不会切换实例。
修复步骤
1. 正确验证功能(排除Cookie干扰)
- 使用无痕浏览器窗口测试,每次测试开启新的无痕窗口,确保没有残留的
ARRAffinityCookie。 - 或手动清除浏览器的
ARRAffinityCookie:打开开发者工具(F12)→ 应用程序 → Cookie → 找到对应域名下的ARRAffinity和ARRAffinitySameSite,删除后再测试。 - 用Postman等工具发送请求,每次请求不携带任何Cookie,观察实例ID是否随机切换。
2. 确认响应头已正确输出
在浏览器开发者工具的“网络”标签中,查看请求的响应头,确认ARR-Disable-Session-Affinity: True确实存在。如果头未出现,说明代码中添加头的时机可能有问题:
- 尝试将添加头的代码移到
OnResultExecuted阶段(用ActionFilter更可靠),避免MVC响应处理过程中覆盖或丢失头:
public class DisableARRAffinityAttribute : ActionFilterAttribute { public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.Headers.Add("ARR-Disable-Session-Affinity", "True"); base.OnResultExecuted(filterContext); } }
然后在目标控制器上标记:
[DisableARRAffinity] public class HomeController : Controller { // 你的Action方法保持不变 }
3. 检查Azure Web App全局配置
确保Azure门户中应用服务的ARR亲和性处于开启状态(配置→常规设置):
- 如果全局已经关闭ARR亲和性,实例本来就是随机路由的,此时添加禁用头无意义;
- 只有全局开启时,针对特定控制器添加禁用头才会生效。
4. 确认实例状态
在Azure门户的应用服务→实例列表中,确认两个实例均处于运行状态,没有实例被闲置或处于不健康状态。
验证结果
按照上述步骤测试后,无Cookie的请求应该会随机命中两个实例,说明ARR-Disable-Session-Affinity头已生效。
内容的提问来源于stack exchange,提问作者bmukes
相关产品推荐
相关产品推荐

