无法从Windows 11主机通过localhost访问WSL2中的Python http.server(端口7070)

前端开发 2026-07-08

我在Windows 11的 WSL2(Ubuntu)实例里运行一个Python HTTP服务器,但无法从Windows主机的浏览器访问它。

以下是在WSL2终端中执行的操作:

drown@DESKTOP-N9JM9BA:/mnt/c/Windows/system32$ python3 -m http.server 7070
Serving HTTP on 0.0.0.0 port 7070 (http://0.0.0.0:7070/) ...

问题描述:

当我尝试使用以下任一URL,从Windows 11主机浏览器访问服务器时,连接超时,页面没有加载:

  • http://localhost:7070/
  • http://127.0.0.1:7070/
  • http://0.0.0.0:7070/

环境:

  • 操作系统: Windows 11
  • WSL版本: WSL 2
  • WSL发行版: Ubuntu

以下是我的WSL设置
在此输入图片描述

我已检查:

  1. 服务正在 0.0.0.0 上监听,这在理论上应该允许外部连接。
  2. WSL2正在运行,终端输出中没有错误信息。

为什么Windows 11主机无法将 localhost 请求转发到WSL2 VM的这个端口?是否需要某些特定的Windows防火墙规则或WSL网络配置来修复?

非常感谢任何帮助!

解决方案

开启镜像网络模式后,localhost 转发应该可以原生工作——在这种模式下,WSL2共享Windows的网络栈。问题在于Hyper-V防火墙(你设置中也启用)是一个独立的防火墙层,专门过滤WSL流量,独立于Windows Defender防火墙。

修复方法——以管理员身份在PowerShell中运行以下命令:

New-NetFirewallHyperVRule -DisplayName "WSL Allow 7070" -Direction Inbound -Action Allow -Protocol TCP -LocalPorts 7070 -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'

GUID 40E0AC32... 是标准的WSL2 VM创建者ID——无需查找。

要永久允许来自WSL的所有端口,而不是逐个端口设置:

New-NetFirewallHyperVRule -DisplayName "WSL Allow All Inbound" -Direction Inbound -Action Allow -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'

执行任一命令后无需重启WSL。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章