《前后端分离开发环境搭建:CentOS 虚拟机 OpenResty 代理 Windows 上的 Vue 与 Java 服务》
·
你问得非常好!我们来深入分析你提供的 OpenResty(Nginx)配置 中这一行:
proxy_pass http://192.168.150.1:8081;
并解释为什么注释里说:
“这里 是 windows 电脑的 ip 和 Java 服务端口,需要确保 windows 防火墙处于关闭状态”
🔍 场景还原
从你的配置和上下文可以推断出当前架构是:
- OpenResty 运行在 CentOS Stream 9 虚拟机中
- Java 后端服务运行在 Windows 宿主机上,IP 是
192.168.150.1,监听8081端口 - 虚拟机中的 OpenResty 通过
proxy_pass反向代理到宿主机的 Java 服务
也就是说:
浏览器 → 虚拟机 OpenResty (8081) → 宿主机 Windows (192.168.150.1:8081)
⚠️ 注意:此时 流量方向是从虚拟机 → 宿主机(Windows)
❓为什么需要关 Windows 防火墙?
因为:
✅ Windows 防火墙默认会阻止“入站连接”(Inbound Connections)
- 当虚拟机中的 OpenResty 尝试访问
http://192.168.150.1:8081时, - 实际上是在 从外部(虚拟机)向 Windows 发起 TCP 连接请求
- Windows 防火墙会认为这是一个 未经允许的入站连接,直接丢弃或拒绝
- 结果:OpenResty 收到 连接超时 或 Connection refused,返回 502 Bad Gateway
所以,如果不做任何配置,就必须关闭 Windows 防火墙才能让虚拟机访问宿主机的 8081 端口。
但这不是最佳实践!
✅ 正确做法:不关防火墙,而是放行 8081 端口
你不需要关闭整个 Windows 防火墙,只需为 Java 服务的 8081 端口添加一条入站规则。
🛠 操作步骤(在 Windows 宿主机上):
方法一:使用 PowerShell(推荐)
以 管理员身份 打开 PowerShell,运行:
New-NetFirewallRule -DisplayName "Allow Java Backend 8081" -Direction Inbound -Protocol TCP -LocalPort 8081 -Action Allow -Profile Any
方法二:图形界面
- 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
- 点击左侧「高级设置」
- 右键「入站规则」→「新建规则」
- 选择「端口」→「TCP」→「特定本地端口:8081」
- 操作:允许连接
- 配置文件:勾选 域、专用、公用(根据你网络环境)
- 名称:
Java Backend 8081 - 完成
✅ 完成后,虚拟机就能正常访问 192.168.150.1:8081,而防火墙依然开启,系统更安全。
🔒 安全建议
- 不要关闭整个防火墙,只开放必要端口(最小权限原则)
- 如果 Java 服务只给虚拟机用,可以进一步限制来源 IP(高级防火墙规则),但通常局域网内没必要
- 确保 Java 服务绑定的是
0.0.0.0:8081或192.168.150.1:8081,而不是127.0.0.1:8081(否则连本机以外都访问不了)
检查 Java 服务监听地址:
netstat -ano | findstr :8081
应看到:
TCP 0.0.0.0:8081 ...
而不是:
TCP 127.0.0.1:8081 ...
🔄 补充:网络连通性验证
在 CentOS 虚拟机中测试是否能连通 Windows 的 8081:
curl -v http://192.168.150.1:8081
- 如果返回内容 → 成功
- 如果卡住或报错
Connection timed out→ 防火墙拦截 - 如果报
Connection refused→ Java 服务没运行 或 绑定到 127.0.0.1
✅ 总结
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 为什么注释说要关 Windows 防火墙? | 因为防火墙默认阻止外部访问 8081 端口 | 不要关防火墙! 只需添加入站规则放行 8081 |
| 虚拟机能 ping 通 Windows,但不能访问 8081? | ping 用 ICMP,防火墙可能允许 ping 但禁止 TCP 端口 | 放行 TCP 8081 |
| Java 服务只监听 127.0.0.1? | 外部无法访问 | 启动时绑定 0.0.0.0 |
如果你后续把 Java 服务也迁移到虚拟机内部(比如和 OpenResty 同机),就可以直接用 127.0.0.1:8081,完全避开 Windows 防火墙问题,架构也更简洁。
更多推荐


所有评论(0)