Aab*_*nja 6 linux ip localhost node.js windows-subsystem-for-linux
我最近在 Windows 10 上从 Linux 切换到 WSL2 (Ubuntu 20.04)。当我运行任何 NodeJs 应用程序或 Apache 或 Nginx 等服务器时,一切都在 localhost 或 127.0.0.1 上正常工作,但当我使用本地 IP 地址时则无法工作( 192.168.1.65)。
运行 Node js 应用程序时的 netstat -tupln
我尝试过关闭 Windows 和 wsl 中的防火墙,但没有用。
我从“程序和功能”启用了 IIS,它似乎在 localhost 和 ip 上运行良好。所以,我认为这不是网络问题。
我读过的所有帖子都表明,如果可以通过 127.0.0.1 而不是通过 ip 访问该站点,那么您可以为 Apache 或 Nginx 配置服务器配置文件。但我重新安装了 wsl 并且仅通过 NodeJs / Express 进行托管。
Express 应用程序的 server.js 的代码是:
const express = require("express");
const next = require("next");
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.use(express.static("public"));
server.all("*", (req, res) => {
return handle(req, res);
});
server.listen(port, "0.0.0.0", (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
Run Code Online (Sandbox Code Playgroud)
我想做的就是在同一网络上通过手机访问该网站。
Not*_*1ds 10
这里的核心问题是 WSL2 在具有自己的虚拟 NIC 的 Hyper-V VM 中运行,在 Windows 主机后面运行 NAT。另一方面,WSL1 与 Windows NIC 桥接运行。
在 上localhost,Windows 似乎确实会进行自动映射,但对于主机 IP 地址(因此,在本地网络上),它不会。
您将在此Github 线程上找到有关此特定主题的大量信息,以及一些解决方法:
首先,也是最简单的方法是,如果可以的话,针对此特定应用程序使用 WSL1。您可以通过执行(从 PowerShell) a或使用 a然后wsl --set-version <distroname> 1克隆现有实例,将 WSL2 实例转换为 WSL1 。我更喜欢克隆,因为它可以为您提供备份。wsl --export <distroname> <archivename>.tarwsl --import <distroname> <installlocation) <archivename>.tar
netshnetsh根据该线程上的此评论,在 Windows 下进行端口转发。请注意,WSL2 实例的虚拟 NIC 在每次重新启动时都会获得一个新地址,因此您必须在netsh每次重新启动时重复该命令,或者按照所述在脚本中进行设置,并通过任务管理器将其设置为在每次启动时运行。另请注意,您不需要修改 Windows 防火墙规则。
socatsocat在两个上socat -d -d TCP-LISTEN:3000,reuseaddr,fork EXEC:'wsl.exe -d <WSL2DistroName> "socat -d -d TCP-CONNECT:127.0.0.1:3000 -"',确保替换为正确的名称(不带括号)。这基本上会将 WSL1 上的端口 3000 上的任何内容端口转发到 WSL2 上的 3000,并且由于 WSL1 无论如何都以“桥接”方式运行,因此到 Windows 主机上的端口 3000 的连接也将通过该路由。
netsh与无需担心每次启动时 WSL2 IP 更改的选项相比,这具有优势,因为它通过wsl.exe命令的 stdout 运行。
如果您在 Windows 10 Pro 或更高版本上运行,该线程中有有关如何在桥接模式下运行 WSL2 NIC 的说明。我从来没有走过这条路,因为我已经能够使用其他三种方法。
| 归档时间: |
|
| 查看次数: |
19276 次 |
| 最近记录: |