你问得非常好!我们来深入分析你提供的 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
方法二:图形界面
  1. 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
  2. 点击左侧「高级设置」
  3. 右键「入站规则」→「新建规则」
  4. 选择「端口」→「TCP」→「特定本地端口:8081」
  5. 操作:允许连接
  6. 配置文件:勾选 域、专用、公用(根据你网络环境)
  7. 名称:Java Backend 8081
  8. 完成

✅ 完成后,虚拟机就能正常访问 192.168.150.1:8081,而防火墙依然开启,系统更安全。


🔒 安全建议

  • 不要关闭整个防火墙,只开放必要端口(最小权限原则)
  • 如果 Java 服务只给虚拟机用,可以进一步限制来源 IP(高级防火墙规则),但通常局域网内没必要
  • 确保 Java 服务绑定的是 0.0.0.0:8081192.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 防火墙问题,架构也更简洁。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐