Azure 应用程序网关的工作原理
Azure 应用程序网关具有一系列组件,它们结合在一起,以跨 Web 服务器池安全地路由请求并对其进行负载均衡。 应用程序网关包括以下组件:
- 前端 IP 地址:通过前端 IP 地址接收客户端请求。 你可以将应用程序网关配置为具有公共 IP 地址和/或专用 IP 地址。 应用程序网关不能具有多个公共 IP 地址和多个专用 IP 地址。
- 侦听器:应用程序网关使用一个或多个侦听器接收传入的请求。 侦听器接受到达指定协议、端口、主机和 IP 地址组合的流量。 每个侦听器按照你指定的路由规则将请求路由到后端服务器池。 侦听器可以是“基本侦听器”,也可以是“多站点侦听器”。 基本侦听器仅根据 URL 中的路径路由请求。 多站点侦听器还可以使用 URL 的主机名元素路由请求。 侦听器还会处理用于保护用户和应用程序网关之间应用程序的 TLS/SSL 证书。
- 路由规则:路由规则将侦听器绑定到后端池。 规则指定如何解释请求的 URL 中的主机名和路径元素,并将请求定向到相应的后端池。 路由规则还具有一组关联的 HTTP 设置。 这些 HTTP 设置指示是否(以及如何)加密应用程序网关与后端服务器之间的流量。 其他配置信息包括协议、会话粘性、连接排出、请求超时时间和运行状况探测。
应用程序网关中的负载均衡
应用程序网关将使用轮循机制自动对发送到每个后端池中的服务器的请求进行负载均衡。 负载均衡适用于应用程序网关路由实现的 OSI 第 7 层路由,这意味着它会根据应用程序网关规则使用的路由参数(主机名和路径)对请求进行负载均衡。 相反,其他负载均衡器(如 Azure 负载均衡器)则适用于 OSI 第 4 层,它们根据请求的目标服务器的 IP 地址分散流量。
如果需要确保同一会话中某个客户端的所有请求都路由到后端池中的同一服务器,你可以配置会话粘性。
Web 应用程序防火墙
“Web 应用程序防火墙”(WAF) 是一个可选组件,用于在传入的请求到达侦听器之前对其进行处理。 Web 应用程序防火墙根据 Open Web Application Security Project (OWASP) 检查每个请求是否存在常见威胁。 常见威胁包括:SQL 注入、跨站脚本、命令注入、HTTP 请求走私、HTTP 响应拆分、远程文件包含、机器人、爬网程序、扫描程序以及 HTTP 协议违规和异常。
OWASP 定义了一组通用规则来检测攻击。 这些规则统称为核心规则集 (CRS)。 随着攻击越来越复杂,规则集也越来越完善。 WAF 支持四个规则集:CRS 3.2、3.1、3.0 和 2.2.9。 CRS 3.1 为默认值。 如有必要,你可以仅选择规则集中的某些特定规则,以应对某些威胁。 此外,你可以自定义防火墙,以指定请求中要检查的元素,并限制消息的大小以防止上传量过大导致服务器崩溃。
后端池
后端池是一个 Web 服务器集合,可由以下部分组成:一组固定的虚拟机、虚拟机规模集、由 Azure 应用服务托管的应用或本地服务器集合。
每个后端池具有关联的负载均衡器,用于将负载分散到池中。 配置池时,请提供每个 Web 服务器的 IP 地址或名称。 应以同样的方式配置后端池中的所有服务器,包括这些服务器的安全设置。
如果使用的是 TLS/SSL,则后端池具有 HTTP 设置,该设置引用了用于对后端服务器进行身份验证的证书。 网关使用此证书重新加密流量,然后将流量发送到后端池中的某一服务器中。
如果使用 Azure 应用服务来托管后端应用程序,则不需要在应用程序网关中安装任何证书即可连接到后端池。 所有通信均会自动加密。 应用程序网关信任服务器是因为 Azure 对其进行管理。
应用程序网关使用规则来指定如何将在传入端口上接收的消息定向到后端池中的服务器。 如果服务器使用的是 TLS/SSL,则必须配置规则来指示:
- 服务器期望通过 HTTPS 协议来传输流量。
- 要用于加密流量和验证与服务器的连接的证书。
应用程序网关路由
网关将客户端请求路由到后端池中的 Web 服务器时,它将使用为网关配置的一组规则来确定请求的目标位置。 路由此客户端请求流量有两种主要方法:基于路径的路由和多站点路由。
基于路径的路由
基于路径的路由将具有不同 URL 路径的请求发送到不同的后端服务器池。 例如,你可将具有路径 /video/* 的请求定向到包含经过优化可处理视频流的服务器的后端池,将 /images/* 请求定向到处理图像检索的服务器池。
多站点路由
多站点路由可在同一应用程序网关实例上配置多个 Web 应用程序。 在多站点配置中,你将为应用程序网关的 IP 地址注册多个 DNS 名称 (CNAME),以指定每个站点的名称。 应用程序网关使用单独的侦听器来等待每个站点的请求。 每个侦听器将请求传递给不同的规则,该规则可以将请求路由到不同后端池中的服务器。 例如,可将针对 http://contoso.com
的所有请求定向到一个后端池中的服务器,将针对 http://fabrikam.com
的请求定向到另一个后端池中的服务器。 下图显示了此配置:
多站点配置可用于支持多租户应用程序,其中每个租户有其自己的虚拟机集或托管 Web 应用程序的其他资源。
应用程序网关路由还包括以下功能:
- 重定向。 可重定向到另一个站点,也可从 HTTP 重定向到 HTTPS。
- 重写 HTTP 标头。 通过 HTTP 标头,客户端和服务器可连同请求或响应一起传递参数信息。
- 自定义错误页。 应用程序网关允许你创建自定义错误页而非显示默认错误页。 你可以在自定义错误页上使用自己的品牌和布局。
TLS/SSL 终止
在应用程序网关上终止 TLS/SSL 连接时,它会从服务器上卸载 CPU 密集型的 TLS/SSL 终止工作负载。 此外,不需要在服务器上安装证书和配置 TLS/SSL。
如果你需要端到端加密,应用程序网关可以先使用你的私钥对网关上的流量执行解密操作,再使用在后端池中运行的服务的公钥对流量进行重新加密。
流量通过前端端口进入网关。 你可以打开多个端口,应用程序网关可以在任一个端口上接收消息。 流量通过端口进入网关时遇到的第一个部分就是侦听器。 侦听器设置为侦听特定的主机名和特定 IP 地址上的特定端口。 侦听器可使用 TLS/SSL 证书来解密进入网关的流量。 然后,侦听器使用你定义的规则将传入的请求定向到后端池。
通过应用程序网关公开网站或 Web 应用程序也表示你不直接将服务器连接到 Web。 在应用程序网关上仅公开端口 80 或端口 443,然后将其转发到后端池服务器。 在此配置中,无法从 Internet 直接访问你的 Web 服务器,这就减少了基础结构的攻击面。
运行状况探测
运行状况探测确定哪些服务器可用于在后端池中进行负载均衡。 应用程序网关使用运行状况探测将请求发送到服务器。 如果服务器返回状态代码为 200 至 399 的 HTTP 响应,则认为服务器正常运行。 如果未配置运行状况探测,应用程序网关将创建在决定服务器不可用之前等待 30 秒的默认探测。 运行状况探测可确保流量不会被定向到后端池中的无响应或失败的 Web 终结点。
自动缩放
应用程序网关支持自动缩放,并且可以根据不断变化的流量负载模式进行纵向扩展或缩减。 自动缩放还无需在预配期间要求选择部署大小或实例计数。
WebSocket 和 HTTP/2 流量
应用程序网关为 WebSocket 和 HTTP/2 协议提供本机支持。 WebSocket 和 HTTP/2 协议通过长时间运行的 TCP 连接,在服务器和客户端之间实现全双工通信。 此类通信在 Web 服务器和客户端之间更具交互性,并且可以双向进行,而且不像基于 HTTP 的实现那样需要进行轮询。 不同于 HTTP,这些协议的开销很低,并且可以对多个请求/响应重复使用同一 TCP 连接,从而提高资源利用率。 这些协议设计为通过传统 HTTP 端口 80 和 443 运行。