将两个Azure Function Apps路由到单个应用程序网关的问题排查
问题解决指南
一、后端健康探测失败排查
针对你遇到的健康探测错误,按以下步骤逐一排查:
检查子网端口权限:
确认应用网关子网的NSG、UDR或防火墙未阻止对应SKU的端口范围:- v1 SKU:放行出站端口65503-65534
- v2 SKU:放行出站端口65200-65535
这些端口是应用网关与后端通信的专用端口,被阻止会直接导致健康探测失败。
验证后端FQDN解析:
检查故障后端池中配置的FQDN(如graphql.azurewebsites.net)能否被应用网关正常解析:- 登录Azure门户,进入应用网关的后端池页面
- 点击目标后端池,查看「已解析的IP地址」是否为Function App的有效IP
若解析失败,检查应用网关的DNS配置(默认Azure DNS可直接解析Azure App Service FQDN,若用自定义DNS需确保其能正常解析)
检查Function App访问限制:
登录故障Function App的门户页面,进入「网络」>「访问限制」,确认已添加应用网关的公网IP或子网IP到允许列表。未添加的话,Function App会拒绝应用网关的探测请求。核对健康探测配置:
确保健康探测的协议、端口与后端设置完全一致,且探测路径为Function App的有效端点:- 若有自定义健康检查接口(如
/api/health),优先将探测路径设为该接口 - 若无自定义接口,可使用
/作为探测路径,但需确保Function App根路径返回200状态码
- 若有自定义健康检查接口(如
二、单个公网IP区分两个Function App的路由配置
可通过两种方式实现同一公网IP下的后端区分:
1. 基于主机名的路由
- 为两个Function App分别绑定自定义域名(如
api.yourdomain.com和graphql.yourdomain.com) - 在应用网关上创建两个HTTP/HTTPS侦听器,分别设置对应的主机名
- 为每个侦听器创建独立的路由规则,关联对应的后端池和后端设置
- 将自定义域名的A记录指向应用网关的公网IP,确保DNS解析生效
2. 基于路径的路由
- 使用同一个自定义域名(如
yourdomain.com),通过路径前缀区分:- 配置路由规则1:匹配路径
/api/*,转发到apis.azurewebsites.net后端池 - 配置路由规则2:匹配路径
/graphql/*,转发到graphql.azurewebsites.net后端池
- 配置路由规则1:匹配路径
- 若需要去掉路径前缀(如将
yourdomain.com/api/xxx转发为apis.azurewebsites.net/xxx),可在后端设置中启用「路径重写」,设置重写路径为/{remaining}
内容的提问来源于stack exchange,提问作者cafe123
相关产品推荐
相关产品推荐

