Azure虚拟机运行Angular+.NET Core 3.1应用外网访问连接被拒绝排查
问题排查与解决方案
是否为CORS问题
该问题与CORS无关。ERR_CONNECTION_REFUSED是连接拒绝错误,代表请求没有成功到达目标服务器;而CORS错误会在浏览器控制台明确输出跨域策略拦截的相关提示,二者报错特征完全不同,可以直接排除CORS问题。
可能的故障原因
- 前端API地址配置错误:你的Angular项目应该是把后端接口的基础路径硬编码为了
http://localhost:5000。本地开发、虚拟机本地访问时,前后端都运行在同一设备的localhost环境下,所以请求正常;但公网用户访问时,Angular前端代码会被下载到用户本地设备运行,此时localhost指向的是用户自己的设备,而非Azure虚拟机,自然无法连接到后端接口。 - ngrok隧道配置错误:确认ngrok的转发目标为虚拟机的5000端口,启动命令应为
ngrok http 5000,同时确认ngrok运行状态正常,没有端口占用、权限不足等报错。 - .NET Core服务绑定限制:如果你的.NET Core服务启动时仅绑定了环回地址
127.0.0.1:5000,那么只有虚拟机本地可以访问该服务,ngrok无法将公网请求转发到服务端口。可在启动服务时添加参数--urls http://0.0.0.0:5000,让服务监听所有网卡的5000端口。 - Azure虚拟机网络规则限制:如果ngrok运行异常,可检查虚拟机的出站安全规则是否允许访问ngrok的服务节点,一般情况下使用ngrok不需要额外开放入站端口。
修复建议
优先修改Angular项目的后端接口基础路径配置,将硬编码的http://localhost:5000替换为ngrok分配的公网访问域名,或者直接使用相对路径(如/api/xxx),让接口请求自动匹配当前页面的访问域名,即可解决该问题。
内容的提问来源于stack exchange,提问作者htopalov
相关产品推荐
相关产品推荐

