应用程序网关 HTTP 设置配置

应用程序网关使用此处指定的配置将流量路由到后端服务器。 创建 HTTP 设置后,必须将其关联到一个或多个请求路由规则。

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 名称,则会添加一个以 CORS 为后缀的附加 Cookie。 例如,CustomCookieNameCORS

注意

如果设置了属性 SameSite = None,则 Cookie 还必须包含 Secure 标志,并且必须通过 HTTPS 发送。 如果需要基于 CORS 的会话相关性,则必须将工作负载迁移到 HTTPS。 请参阅此处提供的适用于应用程序网关的 TLS 卸载和端到端 TLS 文档 - 概述使用 Azure 门户配置支持 TLS 终止的应用程序网关在门户中使用应用程序网关配置端到端 TLS

连接清空

连接排出可帮助你在计划内服务更新期间正常移除后端池成员。 它适用于以下后端实例:

  • 显式从后端池中删除的后端实例,
  • 在横向缩减操作期间删除的后端实例,或者
  • 由运行状况探测报告为不正常的后端实例。

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

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

此情况的唯一例外是由于网关托管会话相关性而绑定到注销实例的请求,这些请求将继续被转发到注销实例。

协议

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

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

端口

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

受信任的根证书

如果选择 HTTPS 作为后端协议,则应用程序网关需要受信任的根证书来信任端到端 SSL 的后端池。 默认情况下,“使用已知 CA 证书”选项设置为“否”。 如果计划使用自签名证书或内部证书颁发机构签名的证书,则必须为应用程序网关提供后端池将使用的匹配公共证书。 此证书必须以 .CER 格式直接上传到应用程序网关。

如果计划在后端池中使用由受信任的公共证书颁发机构签名的证书,则可将“使用已知的 CA 证书”选项设置为“是”并跳过上传公共证书。

请求超时

此设置表示应用程序网关在接收后端服务器的响应时会等待多少秒。

替代后端路径

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

  • 将 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

后续步骤