无法在 WSL2 / Ubuntu 20.04 之外访问 127.0.0.1:80

无法在 WSL2 / Ubuntu 20.04 之外访问 127.0.0.1:80

我在 WSL2 / Hyper-V / Windows 10 上运行 Ubuntu 20.04。

当我curl http://127.0.0.1在 Ubuntu 中执行此操作时,我得到了以下结果:

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.19.3</center>
</body>
</html>

当我在主机上执行此操作时 - 在 Windows 10 上(使用 Git Bash)我得到了这个:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

如何使端口 80 在 Ubuntu 之外可访问?我需要更新 Windows 中的防火墙规则吗?

答案1

这是因为每个主机都有一个 localhost 127.0.0.1。windows 主机认为它正在访问自己。最简单的解决方案是使用真实 IP 进行 IP 分配。例如 192.168.xx

我发现了以下简介

在 WSL 2 的早期阶段,我们不能使用 localhost。由于 Linux 在 VM 内部,我们需要使用 IP。

目前,为了访问您的应用程序,我们将使用 IP。

答案2

问题:

Windows 10 认为 localhost 是::1

PS C:\Users\michael> ping localhost

Pinging DESKTOP[::1] with 32 bytes of data:
Reply from ::1: time<1ms

Ubuntu 认为 localhost 是127.0.0.1

$ ~ > cat /etc/hosts
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       DESKTOP.localdomain     DESKTOP

当前解决方案:2022 年 5 月 31 日

我最近没有遇到过这个问题。我记得在过去的 4 个月里我做过一次“网络重置”。

“网络重置”解决方案:2021 年 7 月 27 日

WSL 的变化相对较快。

我目前使用 WSL2 的解决方案是

  1. “开始->网络重置(系统设置)->重置
  2. 随意重新启动 Windows,就像 1998 年一样。
  3. 继续我的生活。

解决方案 1:

  1. 本文档
  2. 请注意 wsl 设置中关于 true 的模糊注释(某些版本除外)。
  3. 分别将包含这些内容的文件添加到C:\Users\Me\.wslconfigC:\Users\%UserProfile%\.wslconfig
[wsl2]
localhostForwarding=true

这对我有用。

解决方案 2:

对我来说效果不太好,但对你来说可能不错。按照注释中的说明停止自动生成/etc/hosts,并将 localhost 更改为,::1以便它们引用相同的适配器。为了兼容,0.0.0.0绑定到所有接口(127.0.0.1 和 ::1),这样它就可以正常工作。

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       ip4-localhost
::1 localhost

...

这会把事情搞砸吗?很有可能。如果会,你必须记住摆弄它才能让它工作。

答案3

这对我有用,因为使用 localhost/127.0.0.1 我没有运气:

  1. 使用 ifconfig 获取 WSL2 Linux IP:
aristos32@DESKTOP-V493N00:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.21.115.144  netmask 255.255.240.0  broadcast 172.21.127.255
        inet6 fe80::215:5dff:fea0:1a98  prefixlen 64  scopeid 0x20<link>
  1. 在浏览器中使用此 IP,而不是 localhost

http://172.21.115.144/

答案4

我的解决方案是将本地域的 127.0.0.1 和 ::1 都添加到 Windows 主机文件中。

127.0.0.1       mydomain.local
::1             mydomain.local

相关内容