你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查应用程序网关中的应用服务问题

了解如何诊断并解决将 Azure 应用服务用作后端目标时 Azure 应用程序网关可能出现的问题。

概述

在本文中,你将了解如何排查以下问题,体系结构中心:在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名中更详细地介绍了这些问题

  • 绝对 URL 不正确
  • 重定向 URL 不正确
    • 发生重定向时,应用服务 URL 将公开在浏览器中。
    • 例如:OIDC 身份验证流因主机名不正确的重定向而中断;这包括应用服务身份验证和授权的使用
  • Cookie 损坏
    • Cookie 不会在浏览器与应用服务之间传播
    • 例如:应用服务 ARRAffinity Cookie 域设置为应用服务主机名并且绑定到“example.azurewebsites.net”,而不是原始主机。 因此,会话相关性被损坏。

上述症状的根本原因是,某个设置替代了应用程序网关到应用服务之间使用的主机名,导致其不同于浏览器看到的主机名。 通常,主机名会被替代为默认的应用服务“azurewebsites.net”域。

Root cause - Application Gateway overwrites hostname to azurewebsites.net

示例配置

如果你的配置与以下两种情况之一匹配,则你的设置将遵从本文中的说明:

  • 在 HTTP 设置中启用了“从后端地址中选取主机名”
  • “替代为特定域名”设置为与浏览器请求包含的域名不同的值

原因

应用服务是多租户服务,因此它会使用请求中的主机标头将请求路由到正确的终结点。 应用服务的默认域名 *.azurewebsites.net(例如 contoso.azurewebsites.net)不同于应用程序网关的域名(例如 contoso.com)。 后端应用服务缺少必需的上下文来生成与浏览器看到的域匹配的重定向 URL 或 cookie。

解决方案

生产环境中建议使用的解决方案是将应用程序网关和应用服务配置为不替代主机名。 请按照使用应用程序网关配置应用服务中的“自定义域(建议)”进行操作。

只有在评估在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名一文中所述的可能影响后,才应考虑应用其他解决方法(例如,如下所述重写位置标头)。 这些可能的影响包括域绑定的 cookie 和位置标头外部的绝对 URL 可能会被损坏。

解决方法:重写位置标头

警告

此配置存在限制。 建议查看当客户端与应用程序网关之间使用的主机名不同于后端的应用程序与应用服务之间使用的主机名时可能会产生的影响。 有关详细信息,请查看体系结构中心内的文章:在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名

将 location 标头中的主机名设置为应用程序网关的域名。 要执行此操作,请创建一个重写规则,其中包含评估响应的 location 标头是否包含 azurewebsites.net 的条件。 该规则还必须执行相应的操作来重写 location 标头,使其包含应用程序网关的主机名。 有关详细信息,请参阅有关如何重写 location 标头的说明。

注意

HTTP 标头重写支持仅适用于应用程序网关的 Standard_v2 和 WAF_v2 SKU。 建议迁移到 v2,以获得标头重写和其他 v2 SKU 的高级功能

后续步骤

如果上述步骤无法解决问题,请开具支持票证