Azure中Windows VM的Postman无法访问Linux VM上的Webservice求助
问题排查与解决步骤
一、先解决curl: (7) Failed to connect...连接拒绝问题
这是核心基础问题,需先打通网络连接,再处理403错误:
检查Webservice监听地址
你的Java程序启动时必须绑定到0.0.0.0(允许所有网卡访问),而非localhost或127.0.0.1(仅本地可访问)。在Linux虚拟机上执行以下命令查看监听状态:ss -tulpn | grep <你的服务端口号> # 例如服务用80端口,就执行 ss -tulpn | grep 80若输出显示
127.0.0.1:xxx,说明仅绑定了本地回环,外部无法访问。需修改Java程序启动参数(比如Spring Boot项目设置server.address=0.0.0.0),确保服务监听所有可用网卡。验证Linux本地防火墙规则
即使你认为已开放端口,仍可能存在防火墙规则未生效的情况:- 若使用ufw防火墙:
确认输出包含ufw status你的服务端口/tcp ALLOW Anywhere,无此规则则执行:ufw allow <你的服务端口>/tcp ufw reload - 若使用firewalld防火墙:
查看firewall-cmd --list-allports列表是否包含你的服务端口,无此规则则执行:firewall-cmd --add-port=<你的服务端口>/tcp --permanent firewall-cmd --reload
- 若使用ufw防火墙:
检查Azure网络安全组(NSG)规则
Azure层面的NSG可能拦截了跨虚拟机的流量:- 登录Azure门户,找到Linux虚拟机对应的NSG
- 查看入站安全规则,确认存在一条允许
源为同VNet地址段(如10.0.0.0/24)、目标端口范围为你的服务端口、协议为TCP的规则,且该规则优先级高于拒绝类规则。
二、处理Http Error 403: The IP address/hostname is not allowed问题
若网络连接打通后仍出现403,说明服务本身存在IP白名单限制:
- 检查Java程序的配置文件,查看是否有IP访问控制项(如Spring Security的IP白名单、自定义拦截器规则),将Windows虚拟机的私有IP添加至允许列表。
- 若使用Tomcat等容器,检查容器配置文件(如
context.xml中的RemoteAddrValve),确认未限制外部IP访问,或已将允许的IP范围配置正确。
三、其他排查点
- 确认Linux上的启动脚本(你提到的批处理文件,Linux下应为shell脚本)参数正确,未指定错误的绑定地址或端口,查看服务启动日志,确认服务正常启动并监听预期的IP和端口。
- 检查Linux虚拟机上的服务进程是否在运行:
ps aux | grep <你的Java进程名>
内容的提问来源于stack exchange,提问作者user3204086
相关产品推荐
相关产品推荐

