应用程序网关的多站点托管功能

托管多个站点即可在同一应用程序网关实例上使用面向公众的侦听器配置多个 Web 应用程序。 它可以将多达 100 多个网站添加到一个应用程序网关中,从而为部署配置更有效的拓扑。 每个网站都可以定向到自己的后端池。 例如,contoso.com、fabrikam.com 和 adatum.com,这三个域指向应用程序网关的 IP 地址。 你将创建三个多站点侦听器,并为每个侦听器配置相应的端口和协议设置。

此外,你还可以在多站点侦听器中定义通配符主机名,每个侦听器最多可以定义 5 个主机名。 若要了解详细信息,请参阅侦听器中的通配符主机名

多站点应用程序网关

重要

对于 v1 SKU,规则按照它们在门户中列出的顺序进行处理。 对于 v2 SKU,请使用规则优先级来指定处理顺序。 我们强烈建议先配置多站点侦听器,然后再配置基本侦听器。 这确保将流量路由到适当的后端。 如果基本侦听器先列出并且与传入请求匹配,则该侦听器将处理该请求。

http://contoso.com 的请求路由到 ContosoServerPool,对 http://fabrikam.com 的请求路由到 FabrikamServerPool。

同样,可以在同一应用程序网关部署中托管同一父域的多个子域。 例如,可以在单个应用程序网关部署中托管 http://blog.contoso.comhttp://app.contoso.com

请求传递规则评估顺序

使用多站点侦听器来确保将客户端流量路由到准确的后端时,必须按正确的顺序提供请求路由规则。 例如,如果有 2 个侦听器分别关联了主机名 *.contoso.comshop.contoso.com,则必须先处理主机名为 shop.contoso.com 的侦听器,然后再处理主机名为 *.contoso.com 的侦听器。 如果首先处理主机名为 *.contoso.com 的侦听器,则更具体的 shop.contoso.com 侦听器将不会收到任何客户端流量。

可以通过向与侦听器关联的请求路由规则提供“优先级”字段值来建立规则顺序。 可以指定一个从 1 到 20000 的整数值,1 表示最高优先级,20000 表示最低优先级。 如果传入的客户端流量与多个侦听器匹配,则优先级最高的请求路由规则将用于处理请求。 每个请求路由规则必须有唯一的优先级值。

优先级字段仅影响请求传递规则的评估顺序,这不会更改 PathBasedRouting 请求路由规则中基于路径的规则的评估顺序。

注意

若要使用规则优先级,必须指定所有现有请求路由规则的规则优先级字段值。 使用规则优先级字段后,创建的任何新路由规则必须在其配置中使用规则优先级字段值。

重要

从 API 版本 2021-08-01 开始,规则优先级字段是请求路由规则中的一个必填字段。 如果使用 API 版本 2021-08-01 及更高版本、门户、Azure PowerShell 和 Azure CLI 来应用任何配置更新,则会根据第一个 PUT 调用中的当前评估顺序,自动填充现有请求路由规则的规则优先级字段值。 请求路由规则的未来更新必须在配置中提供规则优先级字段。

侦听器中的通配符主机名

应用程序网关允许使用多站点 HTTP(S) 侦听器进行基于主机的路由。 现在,可以在主机名中使用通配符,如星号 (*) 和问号 (?),并且可以在每个多站点 HTTP(S) 侦听器上使用最多 5 个主机名。 例如,*.contoso.com

在主机名中使用通配符,你可以在单个侦听器中匹配多个主机名。 例如,*.contoso.com 可以与 ecom.contoso.comb2b.contoso.comcustomer1.b2b.contoso.com 等匹配。 使用主机名数组,你可以为侦听器配置多个主机名,以将请求路由到后端池。 例如,侦听器可以包含接受两个主机名的请求的 contoso.com, fabrikam.com

通配符侦听器

注意

此功能仅适用于 Standard_v2 和 WAF_v2 SKU 版应用程序网关。

Azure PowerShell 中,必须使用 -HostNames 而不是 -HostName。 使用 HostNames 时,你可以通过逗号分隔值的形式提及最多 5 个主机名并使用通配符。 例如 -HostNames "*.contoso.com","*.fabrikam.com"

Azure CLI 中,必须使用 --host-names 而不是 --host-name。 使用 host-names 时,你可以通过逗号分隔值的形式提及最多 5 个主机名并使用通配符。 例如 --host-names "*.contoso.com,*.fabrikam.com"

在 Azure 门户的多站点侦听器下,必须选择“多个/通配符”主机类型,以提及最多 5 个主机名并使用允许的通配符。

通配符侦听器 UI

主机名字段中允许使用的字符

  • (A-Z,a-z,0-9) - 字母数字字符
  • - - 连字符或减号
  • . - 句点作为分隔符
  • * - 可以在允许的范围内匹配多个字符
  • ? - 可以在允许的范围内匹配单个字符

在侦听器中使用通配符和多个主机名的条件

  • 单个侦听器中最多只能提及 5 个主机名
  • 星号 * 只能在域样式名或主机名的组件中提到一次。 例如 component1*.component2*.component3。 (*.contoso-*.com) 是有效的。
  • 在一个主机名中,最多只能有两个星号 *。 例如,*.contoso.* 有效,但 *.contoso.*.*.com 无效。
  • 主机名中最多只能有 4 个通配符。 例如,????.contoso.comw??.contoso*.edu.* 有效,但是 ????.contoso.* 无效。
  • 在主机名的组件中一同使用星号 * 和问号 ?*??***)是无效的。 例如,*?.contoso.com**.contoso.com 均无效。

在侦听器中使用通配符或多个主机名的注意事项和限制

  • SSL 终止和端到端 SSL 要求你将协议配置为 HTTPS,并上传要在侦听器配置中使用的证书。 如果它是多站点侦听器,你还可以输入主机名(通常为 SSL 证书的 CN)。 在侦听器中指定多个主机名或使用通配符时,必须考虑以下事项:
    • 如果它是通配符主机名,如 *.contoso.com,则必须上传带有 CN(如 *.contoso.com)的通配符证书
    • 如果同一侦听器中提及了多个主机名,则必须上传一个 CN 与所提及的主机名匹配的 SAN 证书(使用者替代名称)。
  • 不能使用正则表达式来提及主机名。 只能使用星号 (*) 和问号 (?) 等通配符来构成主机名模式。
  • 对于后端运行状况检查,无法对每个 HTTP 设置关联多项自定义探测。 但是,你可以在后端探测其中一个网站,或使用“127.0.0.1”探测后端服务器的 localhost。 但是,在侦听器中使用通配符或多个主机名时,系统将根据规则类型(基本或基于路径),将针对所有指定域模式的请求路由到后端池。
  • “hostname”属性采用一个字符串作为输入,其中只能提及一个非通配符域名。 “hostnames”属性将字符串数组作为输入,可以在其中提及最多 5 个通配符域名。 这两个属性不能同时使用。

有关如何在多站点侦听器中配置通配符主机名的分步指南,请参阅使用 Azure PowerShell使用 Azure CLI 创建多站点。

TLS 和 TCP 协议侦听器的多站点侦听器

多站点功能也可用于 L4 代理,但仅适用于其 TLS 侦听器。 可以通过在 TLS 侦听器中提供域名,将每个应用程序的流量定向到其后端池。 为了在 TLS 侦听器上运行多站点功能,应用程序网关使用服务器名称指示 (SNI) 值(客户端主要提供 SNI 扩展以获取正确的 TLS 证书)。 多站点 TLS 侦听器将从传入连接的 TLS 握手数据中选取此 SNI 值,并将该连接路由到相应的后端池。 TCP 连接本质上没有主机名或域名的概念;因此,这不适用于 TCP 侦听器。

主机标头和服务器名称指示 (SNI)

可以通过三种常用机制在同一基础结构上启用多站点托管功能。

  1. 托管多个 Web 应用程序时,每个唯一的 IP 地址可以托管一个应用程序。
  2. 使用主机名在同一 IP 地址上托管多个 Web 应用程序。
  3. 使用不同的端口在同一 IP 地址上托管多个 Web 应用程序。

当前,应用程序网关支持一个公共 IP 地址,用于侦听流量。 因此,目前不支持多个有自己的 IP 地址的应用程序。

应用程序网关支持多个应用程序,每个应用程序侦听不同的端口,但此方案要求应用程序接受非标准端口上的流量。

应用程序网关需要使用 HTTP 1.1 主机标头才能在相同的公共 IP 地址和端口上托管多个网站。 在应用程序网关上托管的站点也可以通过服务器名称指示 (SNI) TLS 扩展来支持 TLS 卸载。 这种情况意味着,客户端浏览器和后端 Web 场必须支持 RFC 6066 中定义的 HTTP/1.1 和 TLS 扩展。

后续步骤

了解如何在应用程序网关中配置多站点托管

查看使用多站点托管的 Resource Manager 模板,了解如何进行基于模板的端到端部署。