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

Azure Application Gateway配置非白名单路径返回401未授权页

场景说明
  • 现有架构:Azure Application Gateway 部署于VNET内,作为公网流量到API Management(APIM)的入口网关
  • 业务要求:
    • 白名单内的指定API路径正常对外开放,路由至APIM后端
    • 所有非白名单路径返回自定义401未授权页面
  • 当前配置问题:已配置基于路径的路由规则,将白名单路径关联至APIM对应后端设置与后端池;但默认路由指向无实际服务运行的nirvana测试后端池,访问非白名单路径时返回502 Bad Gateway,不符合要求。
已验证的不可行路径
  • 原生自定义错误页能力:Azure Application Gateway 仅支持两类自定义错误页配置,无法直接生成指定状态码的响应:
    • 后端服务不可达时替换默认502错误页
    • Web应用防火墙触发拦截规则时替换默认403错误页
  • 原生重写规则能力:重写规则仅支持修改请求/响应头、调整路由目标,无法直接修改响应状态码,不能直接满足返回401的需求。
  • 初始设想:部署一台固定返回401未授权响应的主机作为默认路由后端池,该方案存在额外运维和成本开销,不是最优解。
最优实现方案

方案1(优先推荐):复用现有APIM实现拦截,无额外资源开销

不需要额外部署任何服务,直接复用架构中已有的APIM即可实现需求:

  • 配置步骤:
    1. 将Application Gateway默认路由的后端池指向现有APIM实例,与白名单路径共用后端
    2. 在APIM配置全局入站策略,判断请求路径不在白名单内时,直接返回401状态码和自定义页面内容,参考策略代码:
<inbound>
    <base />
    <choose>
        <when condition="@(!new HashSet<string>{"/api/allowed-path1", "/api/allowed-path2"}.Contains(context.Request.Path.ToString()))">
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="Content-Type" exists-action="override">
                    <value>text/html;charset=utf-8</value>
                </set-header>
                <set-body>@"<html><head><title>401 未授权</title></head><body><h1>访问被拒绝</h1><p>您当前访问的路径未对外开放,请确认访问地址是否正确。</p></body></html>"</set-body>
            </return-response>
        </when>
    </choose>
</inbound>
  • 方案优势:无额外计算成本,不需要维护额外资源,白名单规则和API逻辑统一在APIM侧维护,自定义响应调整灵活。

方案2(备选):消费级Azure Function作为默认后端

如果不希望非白名单流量进入APIM,可以选择该轻量化方案:

  • 配置步骤:创建消费层Azure Function,编写逻辑固定返回401状态码和自定义响应内容,将Application Gateway默认路由的后端池指向该Function即可。
  • 方案优势:不需要维护常驻虚拟机,按实际调用量计费,非白名单流量较低时成本几乎可以忽略,运维成本远低于自建虚拟机。

不推荐最初设想的自建固定返回401的虚拟机方案:该方案需要承担虚拟机常驻计算成本,同时需要额外配置虚拟机高可用、系统补丁维护等,性价比极低。

内容的提问来源于stack exchange,提问作者Robert L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:57:20