单Application Gateway通过自定义子域名路由多App Service配置求助
解决方案:单Application Gateway基于子域名路由至多App Service
核心结论
完全可行,通过基于主机名的路由规则即可实现子域名分流,同时解决你之前遇到的路径追加问题,全程可使用Azure原生服务完成域名、DNS、网关的配置。
整体架构
- 父域名:
api.yourdomain.com(Azure购买) - 子域名:
dev.api.yourdomain.com(指向开发环境App Service)、prod.api.yourdomain.com(指向生产环境App Service) - 所有子域名DNS记录指向Application Gateway(AGW)的公网IP
- AGW通过匹配请求的
Host头,将流量转发到对应后端池的App Service,同时启用WAF防护
分步配置全流程
1. 准备基础资源
- 购买Azure自定义域名:在Azure门户搜索“域名”,选择合适的域名购买(比如
yourdomain.com)。购买完成后,Azure会自动关联对应的Azure DNS Zone(若未自动创建,手动创建同名DNS Zone)。 - 确认AGW配置:确保AGW已部署,且启用了WAF层(建议用WAF_v2 SKU),拥有固定的公网IP(静态IP,避免DNS频繁更新)。
- App Service准备:两个App Service(dev/prod)已部署同版本代码,确保能通过默认域名正常访问。
2. 绑定子域名到App Service
AGW转发流量时会保留原请求的Host头,因此需要让App Service认可对应的子域名:
- 进入开发环境App Service的“自定义域名”页面,点击“添加自定义域名”。
- 输入子域名
dev.api.yourdomain.com,点击“验证”。Azure会自动生成TXT记录用于域名所有权验证。 - 切换到Azure DNS Zone页面,添加一条TXT记录:
- 名称:
asuid.dev.api - 值:复制App Service验证页面给出的字符串
- 名称:
- 回到App Service验证页面,确认验证通过后,点击“添加”完成绑定。
- 重复上述步骤,将
prod.api.yourdomain.com绑定到生产环境App Service。
3. 配置Application Gateway核心组件
3.1 创建后端池
- 进入AGW的“后端池”页面,点击“添加”:
- 后端池名称:
dev-app-service-pool - 目标类型:
App Service - 目标:选择开发环境的App Service
- 后端池名称:
- 同理创建
prod-app-service-pool,绑定生产环境App Service。
3.2 配置HTTP设置
- 进入AGW的“HTTP设置”页面,点击“添加”:
- 名称:
dev-http-settings - 后端协议:
HTTPS(建议用HTTPS加密) - 后端端口:
443 - 勾选“使用App Service托管的域名”(此选项会自动处理App Service的主机头验证,避免403错误)
- 其他保持默认,点击“添加”
- 名称:
- 同理创建
prod-http-settings,对应生产环境后端池。
3.3 创建多站点监听
- 进入AGW的“监听”页面,点击“添加”:
- 名称:
dev-listener - 前端IP配置:选择AGW的公网IP
- 前端端口:
443(HTTPS) - 协议:
HTTPS - 主机名:
dev.api.yourdomain.com(关键,用于匹配子域名请求) - SSL证书:上传或选择Azure密钥保管库中的SSL证书(若没有,可在Azure购买免费的App Service证书,绑定到子域名)
- 名称:
- 同理创建
prod-listener,主机名设为prod.api.yourdomain.com,使用相同或对应证书。
3.4 创建基于主机名的路由规则
- 进入AGW的“规则”页面,点击“添加”:
- 名称:
dev-route-rule - 关联监听:选择
dev-listener - 后端目标:选择
dev-app-service-pool和dev-http-settings - 其他保持默认,点击“添加”
- 名称:
- 同理创建
prod-route-rule,关联prod-listener、prod-app-service-pool和prod-http-settings。
4. 配置Azure DNS Zone记录
- 进入与域名关联的Azure DNS Zone页面,添加两条A记录:
- 第一条:
- 名称:
dev.api - IP地址:AGW的静态公网IP
- 名称:
- 第二条:
- 名称:
prod.api - IP地址:AGW的静态公网IP
- 名称:
- 第一条:
- 保存记录,等待DNS生效(通常5-10分钟)。
解决你之前遇到的问题
- 路径路由的路径追加问题:之前用路径路由时,AGW默认会将路径追加到后端URL,导致App Service收到的路径是
原路径+追加路径。而基于主机名的路由规则不会修改路径,请求的/api/user会原封不动转发到对应App Service的/api/user,完美匹配你同代码同路径的需求。 - 多监听配置失败问题:之前的多监听未正确配置主机名匹配,且未绑定App Service的自定义域名,导致AGW转发的请求被App Service拒绝(因为App Service不识别陌生的Host头)。现在通过绑定子域名到App Service,同时在AGW监听中指定对应主机名,即可正常转发。
内容的提问来源于stack exchange,提问作者Nikola_Gospodjinacki
相关产品推荐
相关产品推荐

