配置Application Gateway对接App Service遇404问题求助
针对你遇到的问题,以下是配置时容易遗漏的关键点:
路径重写规则缺失
当通过https://<AG-IP>/api1/swagger/index.html访问时,Application Gateway需要将路径前缀/api1剥离后再转发到后端App Service。如果未配置重写规则,后端收到的请求路径是/api1/swagger/index.html,而你的API只监听/swagger/index.html,必然返回404。
配置方法:在路径路由规则中添加重写规则集,将匹配路径/api1/*重写为/{R:1},同理/api2/*重写为/{R:1}。后端HTTP设置的主机头配置错误
App Service是多租户服务,依赖请求的主机头识别目标应用。如果AG转发请求时使用AG的IP或自定义域名作为主机头,App Service无法正确路由到你的API。
配置方法:在后端HTTP设置中,将主机头设置为对应App Service的完整域名(如app1.azurewebsites.net),而非AG的IP或其他域名。ASP.NET Core的HTTPS重定向冲突
日志中出现Failed to determine the https port for redirect警告,说明容器内的ASP.NET Core应用在Production环境下尝试自动HTTPS重定向,但无法识别正确端口,导致请求处理异常。
解决方法:- 在App Service的配置-环境变量中添加
ASPNETCORE_HTTPS_PORT=443,或设置ASPNETCORE_URLS=http://+:80; - 若不需要后端重定向,可在API代码的
Program.cs中注释掉app.UseHttpsRedirection();语句。
- 在App Service的配置-环境变量中添加
App Service访问限制未放行AG的流量
若你已配置App Service禁止公网访问,需确保放行Application Gateway的出站IP地址(AG转发请求时的来源IP是其出站IP),或通过VNet集成将AG与App Service纳入同一虚拟网络,设置App Service仅允许VNet内访问。路由规则优先级设置错误
若存在多条路由规则,需确保/api1/*和/api2/*的规则优先级高于默认规则(AG中优先级数字越小,优先级越高),否则默认规则会优先匹配所有请求,导致路径路由失效。后端池端口与协议匹配
检查后端HTTP设置的端口和协议是否与容器内API的监听配置一致:日志显示API监听http://[::]:443(HTTP协议在443端口),因此AG后端端口需设为443,协议选择HTTP。
内容的提问来源于stack exchange,提问作者Daniel Cuellar

