第2阶段 — 使用 Azure CLI 的 Azure Front Door(Standard)全局路由
发布: (2026年2月28日 GMT+8 12:57)
5 分钟阅读
原文: Dev.to
Source: Dev.to
概览
在第 1 阶段,我们部署了区域性 App Service。
第 2 阶段通过使用 Azure Front Door(Standard)添加 全局入口点 来提升架构——全部通过 Cloud Shell 中的 Azure CLI 完成。
典型的请求流程:
User
↓
Azure Front Door (Global Edge)
↓
Origin Group
↓
App Service (SEA)
即使只有单个区域(受配额限制),此设置仍能提供:
- 全局 Anycast 入口点
- 边缘 TLS 终止
- 基于健康探测的路由
- 面向未来的多区域扩展
单个资源组中的资源
- Azure Front Door 配置文件(Standard)
- 端点
- 源组
- 源(App Service)
- 路由
RG=rg-afd-lab
PROFILE_NAME=afd-profile
ENDPOINT_NAME=afd-endpoint
创建 Front Door 配置文件
az afd profile create \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--sku Standard_AzureFrontDoor
创建端点
az afd endpoint create \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--endpoint-name $ENDPOINT_NAME \
--enabled-state Enabled
获取端点主机名
az afd endpoint show \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--endpoint-name $ENDPOINT_NAME \
--query hostName -o tsv
您将收到类似以下的主机名:
.z01.azurefd.net
创建源组
ORIGIN_GROUP=app-origin-group
az afd origin-group create \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--origin-group-name $ORIGIN_GROUP \
--probe-request-type GET \
--probe-protocol Https \
--probe-path "/" \
--probe-interval-in-seconds 30
这将在 / 上每 30 秒进行一次健康检查。
添加源(App Service)
az afd origin create \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--origin-group-name $ORIGIN_GROUP \
--origin-name sea-origin \
--host-name app-sea-3446.azurewebsites.net \
--origin-host-header app-sea-3446.azurewebsites.net \
--priority 1 \
--weight 1000 \
--enabled-state Enabled
重要
origin-host-header必须与 App Service 主机名匹配。- 默认强制进行 HTTPS 证书验证;不匹配会导致错误。
创建路由(Standard SKU 需要域名)
az afd route create \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--endpoint-name $ENDPOINT_NAME \
--route-name app-route \
--origin-group $ORIGIN_GROUP \
--supported-protocols Http Https \
--patterns-to-match "/*" \
--forwarding-protocol MatchRequest \
--https-redirect Enabled \
--link-to-default-domain Enabled
如果省略 --link-to-default-domain Enabled,命令会失败并显示:
(BadRequest) At least one domain is required for the route.
验证路由
az afd route list \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--endpoint-name $ENDPOINT_NAME \
-o table
您应该看到:
ProvisioningState = SucceededDeploymentStatus = Succeeded
如果 DeploymentStatus = NotStarted,则表示路由尚未在边缘激活。
触发激活
curl https://
第一次请求会导致 Front Door 在全球范围内部署。成功的响应示例:
Hello from Southeast Asia
如果收到:
404 Not Found
X-Cache: CONFIG_NOCACHE
则说明路由 尚未完全部署到边缘(配置层面的错误,而非后端问题)。
直接验证后端
curl -I https://app-sea-3446.azurewebsites.net
- 如果后端返回
200,则问题出在路由激活上。 - 如果路由仍然卡住,删除后重新创建:
az afd route delete # 添加相应的标识符
az afd route create # 重新执行创建命令
重新创建会强制进行全局重新部署。
检查 Origin 组
az afd origin-group show \
--resource-group $RG \
--profile-name $PROFILE_NAME \
--origin-group-name $ORIGIN_GROUP
需要确认的关键字段:
"probePath": "/""probeProtocol": "Https""provisioningState": "Succeeded"
架构图(文本)
Internet
↓
Azure Front Door Edge (Anycast)
↓
Origin Group
↓
App Service (SEA)
- 全局入口点
- 边缘 TLS 终止
- 健康探测路由
- 生产就绪结构
- 支持多区域扩展的能力
第2阶段的关键教训
- Standard SKU 需要为路由进行域关联。
DeploymentStatus = NotStarted表示边缘尚未激活。CONFIG_NOCACHE 404是配置级别的响应,而非后端错误。- 路由对象 会触发全局边缘部署。
- 必须先成功通过健康探测,才能激活。
下一步(第 3 阶段)
- 添加 Web Application Firewall (WAF)
- 配置 custom domain + managed TLS
- 启用 Azure Monitor diagnostics
- 实现 active/passive failover
- 扩展到 multiple regions