应用程序网关后端设置配置

使用后端设置可以管理从应用程序网关资源到后端池中的服务器建立的后端连接的配置。 后端设置配置可以与一个或多个路由规则相关联。

应用程序网关中的后端设置类型

虽然门户用户将只看到“后端设置”选项,但 API 用户将有权访问两种类型的设置。 必须根据协议使用正确的配置。

  • 后端 HTTP 设置 - 适用于支持 HTTP 和 HTTPS 协议的第 7 层代理配置。
  • 后端设置 - 适用于支持 TLS 和 TCP 协议的第 4 层代理(预览版)配置。

Azure 应用程序网关使用网关托管 Cookie 来维护用户会话。 当用户将第一个请求发送到应用程序网关时,它会在响应中使用包含会话详细信息的哈希值设置一个相关性 cookie。 此过程使携带关联 Cookie 的后续请求能够路由到同一个后端服务器,从而保持连接的粘性。

当要在同一台服务器上保存用户会话时,以及在服务器上以本地方式为用户会话保存会话状态时,可以使用此功能。 如果应用程序无法处理基于 Cookie 的相关性,则你无法使用此功能。 若要使用此功能,请确保客户端支持 Cookie。

备注

由于未设置 Secure 或 HttpOnly 标志,某些漏洞扫描可能会标记应用程序网关相关性 Cookie。 这些扫描不考虑使用单向哈希生成 Cookie 中的数据。 Cookie 不包含任何用户信息,仅用于路由。

Chromium 浏览器v80 更新带来了一项强制性要求:必须将不包含 SameSite 属性的 HTTP Cookie 视为 SameSite=Lax。 对于 CORS(跨源资源共享)请求,如果必须在第三方上下文中发送 Cookie,它必须使用 SameSite=None; Secure 属性,并且只应通过 HTTPS 发送它。 否则,在仅限 HTTP 的方案中,浏览器不会在第三方上下文中发送 Cookie。 Chrome 的此更新的目标是增强安全性,避免跨站点请求伪造 (CSRF) 攻击。

为了支持此更改,从 2020 年 2 月 17 日开始,除了现有的 ApplicationGatewayAffinity Cookie 外,应用程序网关(所有 SKU 类型)还会注入另一个名为 ApplicationGatewayAffinityCORS 的 Cookie。 ApplicationGatewayAffinityCORS Cookie 又添加了两个属性 ("SameSite=None; Secure"),这样即使对于跨域请求也可以保持粘性会话。

默认相关性 Cookie 名称为 ApplicationGatewayAffinity ,你可以更改它。 如果在网络拓扑中,你​​在线部署了多个应用程序网关,则必须为每个资源设置唯一的 Cookie 名称。 如果使用自定义相关性 Cookie 名称,则会添加一个以 CORS 为后缀的附加 Cookie。 例如,CustomCookieNameCORS。

备注

如果设置了 SameSite=None 属性,那么 Cookie 必须还包含 Secure 标志,并且必须通过 HTTPS 发送。 如果需要基于 CORS 的会话相关性,则必须将工作负载迁移到 HTTPS。 请参阅应用程序网关的 TLS 卸载和端到端 TLS 文档。 请参阅 SSL 概述使用 TLS 终止配置应用程序网关,以及 配置端到端 TLS

连接清空

连接排出可帮助你在计划内服务更新期间正常移除后端池成员。 它应用到已从后端池中显式移除的后端实例。

可以通过在“后端设置”中启用“连接排出”来将此设置应用于所有后端池成员。 它确保后端池中的所有取消注册实例不会收到任何新的请求/连接,同时保持现有连接,直到达到配置的超时值。 对于 WebSocket 连接,此过程也是真实的。

配置类型 Value
后端设置中未启用连接清空时的默认值 30 秒
在后端设置中启用连接排出时用户定义的值 1 到 3600 秒

此过程的唯一例外是由于网关管理的会话相关性而针对取消注册实例绑定的请求。 这些请求继续转发到取消注册实例。

备注

存在一个限制,配置更新将在连接排出超时后终止正在进行的连接。 若要解决此限制,必须在后端设置中将连接耗尽超时增加到高于最大预期客户端下载时间的值。

Protocol

应用程序网关支持使用 HTTP 和 HTTPS 将请求路由到后端服务器。 如果选择了 HTTP 协议,则流量将以未加密的形式传送到后端服务器。 如果不能接受未加密的通信,请选择 HTTPS。

在侦听器中结合 HTTPS 使用此设置将有助于实现端到端的 TLS。 这样,就可以安全地将敏感数据以加密的形式传输到后端。 后端池中每个已启用端到端 TLS 的后端服务器都必须配置证书,以便能够进行安全的通信。

Port

此设置指定后端服务器要在哪个端口上侦听来自应用程序网关的流量。 可以配置 1 到 65535 的端口号。

受信任的根证书

在后端设置中选择 HTTPS 协议时,应用程序网关资源利用其默认的受信任根 CA 证书存储来验证后端服务器提供的证书的链和真实性。

默认情况下,应用程序网关资源包括常用的 CA 证书,允许在后端服务器证书由公共 CA 颁发时实现无缝后端 TLS 连接。 但是,如果打算使用专用 CA 或具有完整 TLS 验证的自生成证书,则必须在后端设置配置中提供相应的根 CA 证书(.cer)。

后端 HTTPS 验证设置

在 Azure 应用程序网关的后端设置中选择 HTTPS 时,网关会在与后端服务器建立安全连接时执行完整的 TLS 握手验证。 这些验证包括:

  1. 验证证书链以确保证书受信任。
  2. 根据应用程序网关发送的服务器名称指示(SNI)验证证书的主题名称。
  3. 验证证书是否过期,以确认证书是否仍然有效。

默认验证设置可确保网关和后端服务之间的 TLS 通信安全。 在某些情况下,可能需要调整其中一个或多个验证设置。 为了满足不同的客户要求,应用程序网关提供以下可配置选项。 可以根据需要使用任一或两个选项。

显示客户可用的 TLS 验证控件的门户视图的示意图。

属性 价值观
validateCertChainAndExpiry 类型:布尔值(true 或 false)。 默认设置为 true。 这会验证或跳过证书链验证和证书过期验证。
validateSNI 类型:布尔值(true 或 false)。 默认设置为 true。 它验证后端服务器提供的证书的公用名是否与应用程序网关发送的服务器名称指示(SNI)值匹配。
sniName 类型:字符串。 仅当 validateSNI 设置为 true 时,才需要此属性。 可以指定一个 SNI 值,以匹配后端证书的公用名。 默认情况下,应用程序网关使用传入请求的主机头作为 SNI。

备注

  • 我们建议为生产环境启用所有校验。 建议仅出于测试和开发目的(例如使用自签名证书)禁用某些或所有验证。
  • 添加自定义健康探测时,这些设置不适用于测试探针功能。 因此,与定期健康探测进行比较时,你可能会发现这些结果有所不同。
  • 目前不支持 TLS/TCP 代理。

请求超时

此设置表示应用程序网关在接收后端服务器的响应时会等待多少秒。 默认值为 20 秒。 但是,你可能希望根据应用程序的需求调整此设置。 可接受的值为 1 秒到 86400 秒(24 小时)。

替代后端路径

使用此设置可以配置可选的自定义转发路径,以便在将请求转发到后端时使用。 与“替代后端路径”字段中的自定义路径匹配的任意传入路径部分将复制到转发的路径。 下表描述了此功能的工作原理:

  • 将 HTTP 设置附加到基本请求路由规则时:

    原始请求 替代后端路径 请求被转发到后端
    /home/ /override/ /override/home/
    /home/secondhome/ /override/ /override/home/secondhome/
  • 将 HTTP 设置附加到基于路径的请求路由规则时:

    原始请求 路径规则 替代后端路径 请求被转发到后端
    /pathrule/home/ /pathrule* /override/ /override/home/
    /pathrule/home/secondhome/ /pathrule* /override/ /override/home/secondhome/
    /home/ /pathrule* /override/ /override/home/
    /home/secondhome/ /pathrule* /override/ /override/home/secondhome/
    /pathrule/home/ /pathrule/home* /override/ /override/
    /pathrule/home/secondhome/ /pathrule/home* /override/ /override/secondhome/
    /pathrule/ /pathrule/ /override/ /override/

使用自定义探测

此设置用于将自定义探测与某个 HTTP 设置相关联。 只能将一个自定义探测关联到某个 HTTP 设置。 如果未显式关联自定义探测,则会使用默认探测来监视后端的运行状况。 我们建议创建自定义探测,以便更好地控制后端的运行状况监视。

备注

只有在将相应的 HTTP 设置显式关联到某个侦听器之后,自定义探测才会监视后端池的运行状况。

配置主机名

应用程序网关允许与后端建立的连接使用的主机名不同于客户端用来连接到应用程序网关的主机名。 尽管在某些情况下,此配置可能很有用,但在重写主机名时要小心,这样应用程序网关和客户端与后端目标之间就不同了。

在生产环境中,最佳做法是使用相同的主机名用于客户端与应用程序网关连接以及应用程序网关与后端目标连接。 此做法可避免绝对 URL、重定向 URL 和主机绑定 Cookie 出现潜在问题。

在设置偏离此配置的应用程序网关之前,请查看体系结构中心中更详细地讨论的此类配置的含义: 在反向代理与其后端 Web 应用程序之间保留原始 HTTP 主机名

HTTP 设置有两个方面会影响应用程序网关用来连接到后端的 Host HTTP 标头:

  • 从后端地址中选取主机名
  • 主机名替代

从后端地址中选取主机名

此功能将请求中的 host 标头动态设置为后端池的主机名。 主机名使用 IP 地址或 FQDN。

如果后端的域名不同于应用程序网关的 DNS 名称,并且后端必须使用特定的 host 标头才能解析为正确的终结点,则此功能会很有帮助。

例如,使用多租户服务作为后端时。 应用服务是一种多租户服务,它使用具有单个 IP 地址的共享空间。 因此,只能通过自定义域设置中配置的主机名访问应用服务。

自定义域名默认为 example.chinacloudsites.cn。 若要通过未显式注册到应用服务中的主机名或者通过应用程序网关的 FQDN 使用应用程序网关访问应用服务,可以将原始请求中的主机名替代为应用服务的主机名。 为此,请启用“从后端地址中选取主机名”设置。

对于其现有自定义 DNS 名称映射到应用服务的自定义域,建议的配置是不启用“从后端地址中选取主机名”

备注

应用服务环境不需要此设置,这是一个专用部署。

主机名替代

此功能可将应用程序网关上的传入请求中的 host 标头替换为指定的主机名。

例如,如果在www.contoso.com主机名设置中指定,则当请求转发到后端服务器时,原始请求 *https://appgw.chinanorth2.chinacloudapp.cn/path1 将更改为 *https://www.contoso.com/path1

专用后端连接

默认情况下,Azure 应用程序网关会重复使用空闲后端连接,以优化应用程序网关和后端服务器的 TCP 连接的资源利用率。 为了支持每个客户端需要唯一后端连接的客户数据路径中的安全功能,Azure 应用程序网关 V2 提供与后端服务器的专用连接。 此功能在前端和后端连接之间建立直接的一对一映射,确保每个客户端的持久连接。

image

重要

专用后端连接导致后端连接数增加,因此可能需要更多资源来支持应用程序网关和后端服务器上的并发连接增加。 在应用程序网关上,必须考虑增加实例数或启用自动缩放。

当后端是远程服务器时,应用程序网关实例将 SNAT 端口用于每个连接。 随着每个客户端连接建立专用后端连接,SNAT 端口消耗相应增加。 因此,请务必考虑潜在的 SNAT 端口耗尽。 请访问 体系结构最佳做法 以获取指导。

HTTP/2 不支持专用后端连接。

后续步骤