You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web App中ARR-Disable-Session-Affinity失效问题求助

问题分析与解决方案

你遇到的问题大概率是浏览器会话中的ARRAffinity Cookie缓存导致的,而非头配置失效。以下是具体原因和修复步骤:

核心原因

ARR实例亲和性依赖ARRAffinity Cookie实现:

  • 首次请求时,ARR会生成该Cookie并返回给浏览器,后续请求浏览器会自动携带此Cookie,强制路由到同一实例。
  • 即使你在后续响应中添加ARR-Disable-Session-Affinity: True,只要浏览器还持有未过期的ARRAffinity Cookie,ARR依然会按Cookie路由,不会切换实例。

修复步骤

1. 正确验证功能(排除Cookie干扰)

  • 使用无痕浏览器窗口测试,每次测试开启新的无痕窗口,确保没有残留的ARRAffinity Cookie。
  • 或手动清除浏览器的ARRAffinity Cookie:打开开发者工具(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:55:34