了解如何诊断和解决将 Azure 应用服务用作 Azure 应用程序网关的后端目标时可能会遇到的问题。
概述
在本文中,你将了解如何排查以下问题,如体系结构中心中所述: 在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名
- 不正确的绝对 URL
-
重定向 URL 不正确
- 当存在重定向时,应用服务 URL 会在浏览器中公开
- 一个示例:OIDC 身份验证流因主机名错误而中断;这包括使用 应用服务身份验证和授权
-
损坏的 Cookie
- Cookie 不会在浏览器和应用服务之间传播
- 此示例:应用服务 ARRAffinity Cookie 域设置为应用服务主机名,并绑定到“example.chinacloudsites.cn”,而不是原始主机。 因此,会话相关性已中断。
上述症状的根本原因是一个设置问题,该设置导致应用程序网关向应用服务发送的主机名被重写为浏览器看到的另一个主机名。 主机名通常被重写为默认应用服务“chinacloudsites.cn”域。
示例配置
如果配置与以下两种情况之一匹配,则安装程序将遵循本文中的说明:
- 在 HTTP 设置中启用了从后端地址选择主机名
- 使用特定域名替代 的值与浏览器请求的值不同
原因
应用服务是多租户服务,因此它使用请求中的主机标头将请求路由到正确的终结点。 应用服务的默认域名 *.chinacloudsites.cn(例如,contoso.chinacloudsites.cn),不同于应用程序网关的域名(例如,contoso.com)。 后端应用程序服务缺乏生成与浏览器所看到的域一致的重定向 URL 或 Cookie 所需的必要上下文。
解决方案
生产建议的解决方案是将应用程序网关和应用服务配置为不替代主机名。 请按照在使用应用程序网关配置应用服务中关于“自定义域(推荐)”的说明进行操作。
在评估本文中所述的含义后,仅考虑应用另一种解决方法(如下面所述的位置标头重写),即 保留反向代理与其后端 Web 应用程序之间的原始 HTTP 主机名。 这些影响包括域绑定 Cookie 和位置标头之外的绝对 URL 可能仍然损坏的情况。
解决方法:重写 Location 标头
警告
此配置存在限制。 建议查看在客户端和应用程序网关之间使用不同主机名,以及后端中的应用程序和应用服务之间使用不同主机名的影响。 有关详细信息,请查看体系结构中心内的文章:在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名
将位置标头中的主机名设置为应用程序网关的域名。 为此,请创建一个 重写规则 ,该规则的条件用于评估响应中的位置标头是否包含 chinacloudsites.cn。 它还必须执行一个操作,以便重写 Location 标头来拥有应用网关的主机名。 有关详细信息,请参阅 有关如何重写位置标头的说明。
注释
HTTP 标头重写支持仅适用于应用程序网关 Standard_v2和WAF_v2 SKU 。 建议迁移到 v2,以便使用 v2 SKU 的标头重写功能和其他高级功能。
后续步骤
如果上述步骤未解决问题,请开具 支持票证。