Azure Front Door 旨在为外部客户和Microsoft的内部属性提供出色的复原能力和可用性。 尽管 Azure Front Door 的体系结构满足或超过大多数生产工作负荷的需求,但没有分布式系统不受故障的影响。
本文提供了有关实现 Azure 流量管理器的高级分步说明,以在罕见的 Azure Front Door 服务中断期间启用从 Azure Front Door 到备用内容分发网络(CDN)或 Azure 应用程序网关 Web 应用程序防火墙(WAF)的手动故障转移。 它补充了任务关键型 Web 应用程序的全局路由冗余指南中的指导意见。
在 CDN 和 Web 应用程序体系结构中实现高可用性(HA)的行业内存在多个策略。 本文中概述的方法重点介绍简单的手动“破玻璃”故障转移模式。 客户可以使用此模式在服务中断期间快速重定向流量,并在确认服务运行状况后无缝还原到 Azure Front Door 的路由。
本文还包括有关在生产环境中实现高可用性 (HA) 模式、建立健康监测和创建运行手册以支持持续的准备状态的指南。
关键操作差异
本指南提供了两个经过验证的体系结构,这些体系结构使用流量管理器提供自动故障转移。 下表总结了需要注意的关键操作差异:
| 方面 | 方案 1 (Azure Front Door + 应用程序网关) | 方案 2 (Azure Front Door + 其他 CDN) |
|---|---|---|
| 故障转移目标 | 辅助流量管理器实例和多个应用程序网关实例。 | 单个其他 CDN 节点。 |
| 故障转移期间的缓存 | 否。 应用程序网关不缓存。 | 是的。 |
| 地理分布 | 两个特定的 Azure 区域。 | 其他 CDN 的全球边缘网络。 |
| WAF 保护 | Azure Web 应用程序防火墙(一致的规则集)。 | 其他 CDN 的 WAF(不同的规则集)。 |
| 备用期间的成本 | 固定计算成本。 即使空闲,应用程序网关也会收费:WAF_v2的容量最低,每月大约为 200-400 美元。 | 取决于 CDN 供应商的定价。 |
生产环境的注意事项
为生产工作负荷实现 HA 体系结构时,请考虑以下最佳做法和重要说明:
不要为自动故障转移配置主要流量管理器实例。
Azure 流量管理器运行状况探测仅来自位于美国的 Azure 区域。 对于对 Azure Front Door 终结点(或任何使用任播路由的 CDN)的探测时,这些来自美国的探测几乎总是到达美国的 POP 服务器,导致非美国的 POP 服务器的运行状况无法得到验证。 这种情况使 Azure 流量管理器无法根据任播 CDN(如 Azure Front Door)的真实全局健康状况,在 Azure Front Door 和其他入口服务之间自动进行故障切换。
对于需要从多个地理位置进行健康验证的全球工作负载,禁用加权路由和监视的情况下实施手动故障转移,比基于自动化健康检查的路由控制更可靠。
如果当前使用的是 Azure Front Door 托管的证书,则必须迁移到自有 (BYO) 证书。 通过使用自己的证书,无论流量遵循哪个入口路径,都可以使 TLS 证书保持一致。
确保 TLS 证书与 Azure Front Door 兼容。 有关详细信息,请参阅 在 Azure Front Door 自定义域上配置 HTTPS 和 Azure Front Door 的 TLS 加密。
应首先在非生产环境中测试故障转移程序。
流量管理器不支持在 DNS 区域根(根域)进行 CNAME 改写。 如果需要顶点上的流量管理器,则必须使用支持别名记录或类似机制的 DNS 提供程序。 Azure DNS 是这样的 DNS 提供程序。
使用短 DNS 生存时间(TTL)值 300-600 秒。 监视 DNS TTL 传播时间。
使用网络安全组(NSG)和访问控制列表(ACL)锁定应用程序网关。 允许所需的平台范围和入站应用程序端口。 确保所有入口路径的源站安全。 有关详细信息,请参阅网络安全组。
尽管应用程序网关 WAF 可缓解 HTTP/L7 攻击,但 NSG 仅提供数据包筛选,并且不会防范卷或协议级 (L3/L4) DDoS 攻击。 所有 Azure 公共终结点都受益于 Azure 平台中始终启用的基线 DDoS 保护。 它有助于保护 Azure 基础结构,但不包括特定于工作负荷的优化、遥测、成本保护或可用性保证。
对于生产和任务关键型工作负荷,请考虑使用 Azure DDoS 防护服务来帮助保护应用程序网关公共 IP。 有关详细信息,请参阅 Azure DDoS 防护定价。
记录 Azure Front Door 与故障转移解决方案之间的 WAF 规则差异。
我们不建议为这些 HA 体系结构使用 Azure 专用链接,因为备用 CDN 平台无法访问受 Azure Front Door 中专用链接集成保护的源。
此外,应用程序网关需要额外的虚拟网络和专用终结点配置才能访问专用源。 应用程序网关无法使用 Azure Front Door 的本机专用链接功能。
对于与其他 CDN 提供程序一起使用 Azure Front Door 的生产环境,请考虑使用与 CDN 无关的替代源安全控制,以便在无法使用专用链接或
X‑Azure‑FDID验证时强制实施源信任。 这些控件可能包括基于令牌的源身份验证(HMAC 或签名 URL)、相互 TLS(mTLS)、自定义源标头和 IP 地址筛选。编辑本指南中列出的示例命令,以便为您的环境定制这些命令,用于自动化和运行手册。
建立明确的运行手册。 测试故障转移和故障恢复过程。
为所有终结点配置全面的监视和警报。
在故障转移期间验证备用入口解决方案的功能。
在所有平台上测试证书续期流程。
定期验证故障转移端点是否正常运行。 建议进行季度测试。
本指南使用从 PowerShell 运行的 Azure CLI 示例命令。
在继续作之前,请查看 任务关键型 Web 应用程序的全局路由冗余。
方案 1:流量管理器从 Azure Front Door 故障转移到应用程序网关 WAF
此基于 DNS 的负载均衡解决方案使用多个 Azure 流量管理器配置文件。 在 Azure Front Door 出现不太可能的可用性问题时,流量管理器会通过应用程序防火墙网关 WAF 重定向流量。 主流量管理器实例在 Azure Front Door(作为主目标)和指向多区域应用程序网关实例的嵌套辅助流量管理器实例之间路由流量。 在 Azure Front Door 中断期间,流量将被手动故障转移到具有 WAF 保护的区域性应用程序网关部署。
流量流(正常操作):用户→ DNS 查询→主要 Traffic Manager 实例(加权/始终服务路由)→ Azure Front Door(优先级 1)→源服务器。
流量流(Azure Front Door 故障):用户→ DNS 查询→主要流量管理器实例(加权/始终服务路由)→辅助流量管理器实例(优先级模式)→应用程序网关→源服务器。
预部署:Azure Front Door 与 Application Gateway
请务必了解 Azure Front Door 与应用程序网关 WAF 之间的功能差异,以防使用应用程序网关 WAF 不提供的任何功能。 下表提供了概述。
重要
此解决方案假设你当前正在使用 Azure Front Door 在多个区域或全球为流量提供服务。 在此设计中,后续步骤引入了一个辅助流量管理器实例,该实例配置了主要流量管理器实例和区域应用程序网关实例之间的性能路由。
此方法是必需的,因为 Azure Front Door 是全局第 7 层服务。 辅助流量管理器实例通过充当全局负载均衡层来有效替换 Azure Front Door 中基于全局延迟的路由。 因此,流量管理器为地理分散受众保留延迟优化的用户路由。
鉴于这种体系结构转变,必须评估全局流量模式,并在具有有意义的用户卷的区域部署应用程序网关实例,以确保最佳性能和复原能力。
功能差异
| 功能 / 特点 | Azure Front Door | 应用程序网关 |
|---|---|---|
| 核心体系结构和功能 | ||
| 服务范围 | 全球服务 | 区域服务 |
| OSI 层 | 第 7 层(应用程序层) | 第 7 层(应用程序层) |
| 负载均衡级别 | 跨区域 | 在区域或虚拟网络中 |
| 部署模型 | 单个全局实例 | 区域内的实例 |
| 后端范围 | 任何公共终结点(Azure 或外部终结点)和选定的专用链接终结点 | 虚拟网络中的任何公共终结点(Azure 或外部)、专用 IP 地址和 Kubernetes Pod |
| 内容边缘缓存 | 是的 | 否 |
| 网络体系结构 | 使用 anycast Microsoft 的全球边缘网络 | Azure 区域部署(无任何广播) |
| 配置差异 | ||
| 路径模式语法 |
/path/* 或精确 /path |
正则表达式,路径映射 |
| WAF 规则集 | 默认规则集 (OWASP), 机器人管理器规则集, HTTP DDoS 规则集 | 默认规则集 (OWASP), 机器人管理器规则集, HTTP DDoS 规则集 |
| 健康探测评估 | 路由延迟与健康状况 | 仅健康状态 |
| 后端选择 | 基于优先级、权重、延迟 | 轮循机制,Cookie 相关性 |
| 路由规则 | ||
| 基于路径的路由 | ✓ 是 | ✓ 是 |
| 模式匹配 | 完全匹配路径、通配符路径(/*)、不区分大小写、通配符前面必须有 / |
URL 路径映射、基于路径的规则、支持的正则表达式模式 |
| 基于主机的路由 | • 多个前端主机 | • 多站点托管 |
| URL 重写 | 静态路径到静态路径(经典) | URL 路径重写 |
| 路由方法 | 优先级、权重、基于延迟 | 负载感知延迟优化*、加权*、会话相关性(*适用于容器的应用程序网关可用) |
| 路由功能 | ||
| 规则引擎/重写规则 | 具有条件和动作的规则集 | 包含条件和操作的重写规则集 |
| 路径模式中的正则表达式 | 不支持 匹配模式 | 支持 PCRE |
| 标头和请求处理 | ||
| 标题重写 | ✓ 请求和响应标头 | ✓ 请求和响应标头 |
| 标头值字符限制 | 无记录限制 | 重写规则中的 1,000 个字符 |
| 主机标头重写 | ✓ 支持 | • 支持(无法重写到外部域) |
| 服务器变量 | ✓ 支持 | ✓ 支持 |
| 标头模式匹配 | 具有模式的条件 | 正则表达式模式匹配 |
| 安全功能 | ||
| WAF 可用性 | • 可选(高级层) | ✓ 可选(WAF 层) |
| L3/4 DDoS 防护 | • 内置 | 通过 Azure DDoS 防护服务 |
| SSL/TLS 策略 | √ 可配置 | √ 可配置 |
| 端到端 SSL | ✓ 支持 | ✓ 支持 |
| 支持专用链接 | • 高级层 | ✓ V2 层 |
| WAF 自定义规则 | ✓ 支持 | ✓ 支持 |
WAF 差异
| Azure Front Door | 应用程序网关 |
|---|---|
| Microsoft默认规则集 (DRS) 2.1 | OWASP 核心规则集 (CRS) 3.2 或 4.0 |
| 规则 ID:949xxx 系列 | 规则 ID:9xxxxx 系列 |
| Azure Front Door WAF (DRS):检查请求正文的前 128 KB | 应用程序网关 WAF (CRS 3.2+):最大可检测 2 MB;4 GB 文件上传;强制执行和检测可以独立配置 |
Recommendations
由于必须为每个 WAF 维护不同的规则集,因此请使用 Azure Front Door 规则集作为基线。 创建一个应用程序网关规则集,该规则集与 Azure Front Door 规则集尽可能接近。
单独和独立测试应用程序网关 WAF。
记录这两个平台的所有自定义排除项。
定期审核规则集以保持一致性。
遵循 Azure 应用程序网关基础结构配置中的网络指南。 请务必执行以下虚拟网络和子网要求:
使用以下子网大小分配(按区域):
最小值:/27(32 个地址)
建议:/24(256 个地址)用于自动扩展和无中断维护
公式:(最大实例 * 10) + 5 个 Azure 保留 IP
示例:20 个最大实例→ (20 * 10) + 5 = 205 个 IP →使用/24
为获得最佳安全性,请使用应用程序网关的专用子网(无其他资源)。
确保入站连接允许:
来自 Internet 的 443/80(或特定源范围)
来自 Azure 网关管理器的 65200-5535 (应用程序网关 v2)
Azure Load Balancer
阻止其他入站连接。 不要阻止所需的出站 Internet 连接。
使用应用程序安全组进行后端分段和最小特权规则。
关键实现步骤
步骤 1:准备先决条件
使用自定义域和 BYO 证书配置的 Azure Front Door。
在您的 CNAME 记录中设置较低的 DNS TTL,以便 Azure Front Door 能够以最低延迟的时间设置来处理流量。
有权创建虚拟网络、应用程序网关实例和流量管理器实例的 Azure 订阅。
Azure Key Vault 中的 SSL/TLS 证书或可用于上传。
可从 Azure 虚拟网络访问的源服务器。
重要
如果当前使用的是 Azure Front Door 管理的证书,则必须在实现此解决方案之前迁移到 BYO 证书。 Azure Front Door 托管的证书无法导出并安装在备用 CDN 上。 有关详细信息,请参阅 在 Azure Front Door 自定义域上配置 HTTPS。
步骤 2:在第一个区域中部署应用程序网关
为应用程序网关创建网络基础结构。 有关详细信息,请参阅应用程序网关基础结构配置。
创建托管标识并授予 Key Vault 访问权限。 有关详细信息,请参阅使用 Key Vault 证书实现 TLS 终止。
应用程序网关需要具有私钥的 PFX 格式的 SSL/TLS 证书。 证书必须可从 Key Vault 访问或直接上传。 使用 Azure Front Door 使用的相同证书来确保 TLS 行为一致。
创建 WAF 策略。 有关详细信息,请参阅 为应用程序网关创建 WAF 策略。
使用 HTTPS 和 WAF 创建应用程序网关实例。 有关详细信息,请参阅 配置具有 TLS 终止的应用程序网关实例。
配置后端主机标头。 有关详细信息,请参阅 排查应用程序网关中的后端运行状况问题。
验证应用程序网关:
# Get Application Gateway public IP $APPGW_IP = az network public-ip show ` --name $APPGW_PIP_NAME_R1 ` --resource-group $RESOURCE_GROUP ` --query ipAddress -o tsv Write-Host "Application Gateway IP: $APPGW_IP" # Test Application Gateway directly (SkipCertificateCheck because certificate is for domain, not IP) Invoke-WebRequest -Uri "https://$APPGW_IP/index.html" -Method Head -SkipCertificateCheck预期结果为状态代码 200。 如果收到“502 错误的网关”,请确保后端 HTTP 设置
--host-name-from-backend-pool true已启用。
步骤 3:配置 WAF 策略设置(可选)
默认情况下,WAF 在检测模式下创建。 防护模式主动阻止恶意请求。 在生产环境中启用预防模式之前进行彻底测试。
评估您的全局流量模式,并在用户流量有意义的区域部署应用程序网关实例。 如果要在多个区域中部署应用程序网关,请对每个附加区域重复步骤 2 和 3(例如中国北部 2)。 使用不同的虚拟网络地址空间(10.2.0.0/16、10.3.0.0/16 等)和特定于区域的变量后缀(R2、R3 等)。
步骤 4:创建流量管理器架构以支持应用程序网关 WAF 端点
在性能模式下创建次级流量管理器实例,如图中前面所示的方案。 有关详细信息,请参阅 创建流量管理器配置文件。
对于单区域配置,请使用以下详细信息:
- 路由方法:优先级。
- 终结点:单个应用程序网关公共 IP 地址。
对于多区域配置,请使用以下详细信息:
- 路由方法:性能(将用户路由到最接近正常的应用程序网关实例)。
- 终结点:跨区域多个应用程序网关公共 IP 地址。
- 终结点位置:每个终结点的 Azure 区域(性能路由所需的)。
使用以下配置设置:
设置 价值 注释 路由方法 性能 (多区域)或 优先级 (单区域) 性能 优化多区域配置的延迟。 协议 HTTPS 通过 HTTPS 验证应用程序网关运行状况。 端口 443 标准 HTTPS 端口。 路径 /health或/index.html必须与应用网关后端运行状况探测器的路径匹配。 TTL 300 秒 平衡 DNS 查询负载和响应能力。 注释
默认情况下,应用程序网关的 Azure 公共 IP 未配置 DNS 名称。 必须在流量管理器终结点中直接使用公共 IP 地址,而不是 DNS 名称。 性能路由需要此参数
--endpoint-location才能启用地理路由。创建主要加权/始终可用的流量管理器实例,如本方案之前图示所示。 有关详细信息,请参阅 创建流量管理器配置文件。
对于这两个终结点,请使用以下配置:
设置 价值 注释 路由方法 加权 允许通过终结点状态(启用或禁用)进行手动控制。 重量 100 协议 HTTPS 用于验证 SSL/TLS 端点的必要条件。 端口 443 标准 HTTPS 端口。 路径 /index.html选择用于运行状况检查的轻型终结点。 TTL 300 秒 DNS TTL。 较低的值可实现更快的故障转移,但会增加 DNS 查询。 运行状况检查 始终为流量提供服务 不要启用运行状况检查。 这些配置特定于主终结点:
类型: 外部终结点
名称:endpoint-afd-primary
完全限定的域名(FQDN)或 IP 地址:Azure Front Door 终结点的主机名(例如
myapp-12345.z01.azurefd.net)启用终结点:已选中(已启用)
自定义标头设置:
Host=$CUSTOM_DOMAIN(Azure Front Door 需要路由到正确的自定义域)运行状况检查: 始终为流量提供服务 (禁用运行状况检查)
这些配置特定于辅助终结点:
类型: 外部终结点
名称:endpoint-appgw-secondary
完全限定的域名(FQDN)或 IP 地址:次要流量管理器 FQDN(例如
myapp-appgw.trafficmanager.cn)启用终结点:已清除(已禁用)
验证流量管理器运行状况:
# Check endpoint health status az network traffic-manager profile show ` --name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --query "{ProfileStatus:profileStatus, MonitorStatus:monitorConfig.profileMonitorStatus, Endpoints:endpoints\[\].{Name:name, Target:target, Priority:priority, Status:endpointMonitorStatus}}"这两个终结点都应显示
Status: Online。 如果终结点显示Degraded或CheckingEndpoint,请等待 1-2 分钟,以便运行状况探测完成。
步骤 5:将 DNS CNAME 更新到流量管理器并验证更新
警告
以下步骤会将生产流量从 Azure Front Door 直接重定向到流量管理器,并造成潜在的服务影响。 在继续之前:
- 首先在非生产环境中测试这些步骤。 例如,暂时修改非生产工作站上的本地
hosts文件,以将自定义域解析为流量管理器终结点。 此修改允许验证不会影响实时流量。 - 在进行更改的至少 24 小时之前,将 DNS CNAME TTL 减少到可能的最低值(例如 60-300 秒)。
- 在低流量期间规划维护时段(如果可能)。
- 如果出现问题,请准备好回滚方案。
更新 DNS CNAME 记录以指向主要流量管理器实例,而不是直接指向 Azure Front Door。
领域 旧值 新值 名称/主机 www www (无更改) 值/指向 Azure Front Door 终结点的主机名 $ATM_DNS_NAME.trafficmanager.cn验证流量管理器解析:
# Verify Traffic Manager profile is resolving nslookup "$ATM_DNS_NAME.trafficmanager.cn"测试应返回 Azure Front Door 终结点的 IP 地址。
等待 DNS 传播,然后测试 HTTPS 连接。 DNS 传播通常需要 5-10 分钟,但全局最多可能需要 48 小时。
# Check DNS from different resolvers nslookup $CUSTOM_DOMAIN 8.8.8.8 # Google DNS # Test HTTPS connectivity Invoke-WebRequest -Uri "https://$CUSTOM_DOMAIN/index.html" -Method Head此测试应返回状态代码 200。
DNS 切换后,主动监视以下 Azure Front Door 指标:
请求计数:计数应保持一致,且流量不会下降。
响应时间:时间应保持在正常范围内。
错误率:4xx/5xx 错误不应增加。
源健康:后端健康状况应保持
Online。
步骤 6:测试故障转移过程
模拟 Azure Front Door 故障(手动故障转移到应用程序网关):
# Manual failover to Application Gateway # Disable Azure Front Door endpoint az network traffic-manager endpoint update ` --name "endpoint-afd-primary" ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Disabled # Enable secondary Traffic Manager endpoint (Application Gateway) az network traffic-manager endpoint update ` --name "endpoint-appgw-secondary" ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Enabled # Verify Traffic Manager endpoint status az network traffic-manager endpoint list ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --query "[].{Name:name, Status:endpointStatus, Health:endpointMonitorStatus}" ` --output table # Flush DNS cache (Windows) ipconfig /flushdns # Verify DNS resolution (should now point to secondary Traffic Manager instance and Application Gateway) nslookup $CUSTOM_DOMAIN # Test - should now work via Application Gateway curl --head https://$CUSTOM_DOMAIN/注释
DNS TTL 会影响故障转移时间。 TTL 为 60 秒,客户端最多可能需要 60 秒才能看到更改。 请使用
nslookup验证解析是否指向应用程序网关。切回到 Azure Front Door:
# Re-enable Azure Front Door endpoint az network traffic-manager endpoint update ` --name "endpoint-afd-primary" ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Enabled # Disable Application Gateway (via Secondary Traffic Manager) az network traffic-manager endpoint update ` --name "endpoint-appgw-secondary" ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Disabled # Verify endpoint status az network traffic-manager endpoint list ` --profile-name $ATM_PRIMARY_PROFILE ` --resource-group $RESOURCE_GROUP ` --query "[].{Name:name, Status:endpointStatus, Health:endpointMonitorStatus}" ` --output table # Flush DNS cache (Windows) ipconfig /flushdns # Verify DNS resolution (should now point back to Azure Front Door) nslookup $CUSTOM_DOMAIN # Test - should now work via Azure Front Door curl --head https://$CUSTOM_DOMAIN/验证当前路由:
# Check which endpoint is serving traffic nslookup $CUSTOM_DOMAIN Invoke-WebRequest -Uri "https://$CUSTOM_DOMAIN/index.html" -Method Head | Select-Object -ExpandProperty Headers响应标头可帮助标识服务终结点:
- Azure Front Door 包括
x-azure-ref标头。 - 通过应用程序网关的流量可能包括
Server: Microsoft-IIS或类似的流量。
- Azure Front Door 包括
方案 2:流量管理器从 Azure Front Door 故障转移到备用 CDN
此解决方案使用具有加权/始终服务路由的单个流量管理器配置文件,以便可以在 Azure Front Door 和备用 CDN 之间手动切换流量。
主终结点:Azure Front Door 自定义域终结点。
辅助终结点:备用 CDN 终结点。
流量流(正常作):用户→ DNS 查询→流量管理器(加权/始终服务路由)→ Azure Front Door(优先级 1)→源服务器。
流量路径(Azure Front Door 故障):用户→ DNS 查询→ 流量管理器(加权/始终可用路由)→ 备用 CDN(优先级 2)→ 源服务器。
关键实现步骤
步骤 1:准备先决条件
使用以下方法配置备用 CDN 提供程序:
使用自定义域和 BYO 证书配置的 Azure Front Door。
备用 CDN 帐户。
在您的 CNAME 记录中设置较低的 DNS TTL,以便 Azure Front Door 能够以最低延迟的时间设置来处理流量。
Azure Front Door 和备用 CDN 都可以访问的源服务器。
可以修改 DNS 记录的自定义域。
重要
如果当前使用的是 Azure Front Door 管理的证书,则必须在实现此 HA 解决方案之前迁移到 BYO 证书。 Azure Front Door 托管的证书无法导出并安装在备用 CDN 上。 有关 BYO 证书的详细信息和配置说明,请参阅 在 Azure Front Door 自定义域中配置 HTTPS。
步骤 2:配置备用 CDN
配置备用 CDN 提供程序:
使用自定义域设置 CDN 区域或属性。
配置源服务器的方式与配置 Azure Front Door 后端池的方式相同。
上传 BYO SSL/TLS 证书。 此证书与在 Azure Front Door 中使用的证书相同。
配置 CDN 缓存规则以匹配 Azure Front Door 行为。 例如,配置缓存持续时间和查询字符串处理。
设置缓存设置、控制标头和压缩设置以匹配 Azure Front Door 配置。
如果 CDN 提供程序提供 WAF 功能,请设置 WAF 规则。 尝试匹配 Azure Front Door WAF 策略。
配置自定义域以匹配 Azure Front Door 自定义域(例如
www.contoso.com)。记录 CDN 边缘主机名以用于流量管理器配置(例如,
your-site.cdn.provider.net)。
步骤 3:创建流量管理器配置文件
应用以下配置来创建流量管理器配置文件。 有关详细信息,请参阅 创建流量管理器配置文件。
| 设置 | 价值 | 注释 |
|---|---|---|
| 路由方法 | 加权 | 允许通过终结点状态(启用或禁用)进行手动控制。 |
| 重量 | 100 | 创建流量管理器配置文件时输入 100 ,并为两个终结点分别输入 100 。 |
| 协议 | HTTPS | 用于验证 SSL/TLS 端点的必要条件。 |
| 端口 | 443 | 标准 HTTPS 端口。 |
| 路径 | /index.html |
选择用于运行状况检查的轻型终结点。 |
| TTL | 300 秒 | DNS TTL。 较低的值可实现更快的故障转移,但会增加 DNS 查询。 |
步骤 4:配置流量管理器的端点
在流量管理器配置文件中创建两个终结点。
将这些配置用于主终结点(Azure Front Door):
类型: 外部终结点
名称:endpoint-afd-primary
完全限定的域名(FQDN)或 IP 地址:Azure Front Door 终结点的主机名(例如
myapp-endpoint-12345.z01.azurefd.net)重量: 100
启用终结点:最初已选中(已启用)
自定义标头设置:
Host=$CUSTOM_DOMAIN(Azure Front Door 需要路由到正确的自定义域)运行状况检查: 始终为流量提供服务 (禁用运行状况检查)
注释
此参数 --custom-headers "Host=$CUSTOM_DOMAIN" 对于 Azure Front Door 终结点至关重要。 如果没有,Azure Front Door 可能无法正确将请求路由到自定义域配置。 它是 Azure 流量管理器支持的一项功能。
将这些配置用于辅助终结点(备用 CDN):
类型: 外部终结点
名称: endpoint-cdn-secondary
完全限定域名(FQDN)或 IP 地址:CDN 边缘的主机名(例如
myapp.cdn.net)重量: 100
启用终结点:最初为备用模式清除(已禁用)
步骤 5:将 DNS CNAME 更新到流量管理器并验证更新
警告
以下步骤会将生产流量从 Azure Front Door 直接重定向到流量管理器。 在继续之前:
- 首先在非生产环境中测试这些步骤。
- 在进行更改的至少 24 小时之前,将 DNS CNAME TTL 减少到可能的最低值(例如 60-300 秒)。
- 在低流量期间规划维护时段(如果可能)。
- 如果出现问题,请准备好回滚方案。
将 DNS CNAME 记录更新为指向流量管理器,而不是直接指向 Azure Front Door:
领域 旧值 新值 名称/主机 www www (无更改) 值/指向 Azure Front Door 终结点的主机名 $ATM_CDN_DNS_NAME.trafficmanager.cnDNS 传播通常需要 5-10 分钟,但全局最多可能需要 48 小时。
验证流量管理器解析。 等待 DNS 传播,然后测试 HTTPS 连接。
# Verify Traffic Manager profile is resolving nslookup "$ATM_CDN_DNS_NAME.trafficmanager.cn" # Expected result: Should return IP address of Azure Front Door endpoint # Check DNS from different resolvers nslookup $CUSTOM_DOMAIN 8.8.8.8 # Google DNS # Test HTTPS connectivity Invoke-WebRequest -Uri "https://$CUSTOM_DOMAIN/index.html" -Method Head # Expected result: Status code 200DNS 切换后,主动监视以下 Azure Front Door 指标:
请求计数:计数应保持一致,且流量不会下降。
响应时间:时间应保持在正常范围内。
错误率:4xx/5xx 错误不应增加。
源健康:后端健康状况应保持
Online。
步骤 6:测试故障转移过程
手动故障切换到备用 CDN:
# Failover: Disable Azure Front Door and enable CDN az network traffic-manager endpoint update ` --name "endpoint-afd-primary" ` --profile-name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Disabled az network traffic-manager endpoint update ` --name "endpoint-cdn-secondary" ` --profile-name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Enabled # Verify endpoint status az network traffic-manager profile show ` --name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --query "endpoints[].{Name:name, Status:endpointStatus, Health:endpointMonitorStatus, Target:target}" # Flush local DNS cache and verify resolution ipconfig /flushdns nslookup "$ATM_CDN_DNS_NAME.trafficmanager.cn" # Test HTTPS access curl --head https://$CUSTOM_DOMAIN/切回到 Azure Front Door:
# Failback: Enable Azure Front Door, disable CDN az network traffic-manager endpoint update ` --name "endpoint-afd-primary" ` --profile-name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Enabled az network traffic-manager endpoint update ` --name "endpoint-cdn-secondary" ` --profile-name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --type externalEndpoints ` --endpoint-status Disabled # Verify az network traffic-manager profile show ` --name $ATM_CDN_PROFILE_NAME ` --resource-group $RESOURCE_GROUP ` --query "endpoints[].{Name:name, Status:endpointStatus, Health:endpointMonitorStatus}"
监测
重要
配置综合监视器,以立即针对故障发出警报。 当自动故障转移不足以应对时(例如,流量管理器无法检测到的 Azure Front Door 自定义域问题),这些警报应触发手动故障转移。
建议对生产环境使用以下监视解决方案:
Azure Monitor 工作簿:跟踪流量管理器查询、Azure Front Door 请求和应用程序网关运行状况。 有关详细信息,请参阅 工作簿概述。
外部式监控以检测 Azure Front Door 的全局问题:实施外部的全球综合监控解决方案(如 Catchpoint 或 ThousandEyes)来监控终端节点。 WebPageTest 等服务提供免费的替代方法,提供有限的全球可见性。
Application Insights 可用性测试:使用多区域 HTTP 检查。 有关详细信息,请参阅 Application Insights 可用性测试。
DNS 监视:通过 DNSPerf、Pingdom 或 Uptime.com 验证 CNAME 解析链和 TTL 传播。
证书监视:使用 Qualys SSL 实验室中的 SSL 服务器测试 分析服务器的配置。