在Azure VM部署APISIX后路由至App Service遇404错误求助
问题分析与解决方案
核心原因
App Service的专用端点(Private Endpoint)有个关键特性:必须通过匹配其注册域名的Host头访问,直接用私有IP访问时,请求的Host头是IP地址,不符合App Service的路由规则,因此返回404。
你在VM里用域名访问正常,是因为DNS解析后请求自动带上了App Service的域名作为Host头;而APISIX转发时把域名解析成私有IP,同时默认将Host头替换为目标IP,导致App Service无法识别请求,同样返回404。
无需更换网关/容器化的解决方法
方法1:强制APISIX转发时携带正确的Host头
修改APISIX的路由或上游配置,手动设置Host头为你的App Service域名(比如yourapp.azurewebsites.net或自定义域名)。
路由配置示例(YAML):
routes: - uri: /* upstream: nodes: "10.0.5.5:443": 1 # App Service私有IP scheme: https plugins: proxy-rewrite: headers: set: Host: "yourapp.azurewebsites.net" # 替换为你的App Service域名
上游配置示例(YAML):
upstreams: - id: 1 nodes: "10.0.5.5:443": 1 scheme: https headers: set: Host: "yourapp.azurewebsites.net"
方法2:让APISIX直接用域名作为上游目标
确保APISIX所在环境能通过私有DNS解析App Service域名到私有IP(需配置Azure私有DNS区域privatelink.azurewebsites.net,将你的App Service域名指向专用端点IP),然后将APISIX的上游地址设为App Service域名而非私有IP。
这种方式下,APISIX转发时会自动携带域名作为Host头,同时流量通过私有DNS解析到专用端点IP,完全走私有网络。
验证步骤
- 用curl直接测试私有IP,携带正确Host头,确认能正常返回:
curl -H "Host: yourapp.azurewebsites.net" https://10.0.5.5 - 修改APISIX配置后,发送请求并查看access.log,确认转发的请求中Host头已正确设置。
内容的提问来源于stack exchange,提问作者SHZhao74
相关产品推荐
相关产品推荐

