![无法在 WSL2 / Ubuntu 20.04 之外访问 127.0.0.1:80](https://linux22.com/image/1634932/%E6%97%A0%E6%B3%95%E5%9C%A8%20WSL2%20%2F%20Ubuntu%2020.04%20%E4%B9%8B%E5%A4%96%E8%AE%BF%E9%97%AE%20127.0.0.1%3A80.png)
我在 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 的解决方案是
- “开始->网络重置(系统设置)->重置
- 随意重新启动 Windows,就像 1998 年一样。
- 继续我的生活。
解决方案 1:
- 读本文档
- 请注意 wsl 设置中关于 true 的模糊注释(某些版本除外)。
- 分别将包含这些内容的文件添加到
C:\Users\Me\.wslconfig
或C:\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 我没有运气:
- 使用 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>
- 在浏览器中使用此 IP,而不是 localhost
http://172.21.115.144/
答案4
我的解决方案是将本地域的 127.0.0.1 和 ::1 都添加到 Windows 主机文件中。
127.0.0.1 mydomain.local
::1 mydomain.local