如何为在 WSL 2 中运行的服务器(例如 node.js)设置自定义主机名和端口

MoM*_*oMo 1 hostname hosts-file windows-10 wsl-2

(我提供了一个简单的工作解决方案作为回应)

我最近从 macOS 转移到 WSL 2。我有两个节点服务器在 WSL 2(Ubuntu 发行版)中运行。每个都必须可通过自定义主机名访问以用于开发和生产目的。我很难通过自定义主机名(即在某些 ../etc/hosts 文件中设置)访问节点服务器,尤其是考虑到 WSL 2 的动态 IP 会随着 WSL/pc 'boot' 而变化。如何在 WSL 2 中设置自定义主机名?

设想:

每个 node.js 应用程序服务器(再次在 WSL 2 中运行)必须从浏览器使用以下 URL/自定义主机名访问:

MoM*_*oMo 8

在四处搜索后,我发现以下相对简单的过程有效。我想我会与 WSL 2 的新手分享并节省一些时间和麻烦。注意,虽然我使用 node 作为服务器堆栈,但这个过程应该或多或少与其他应用程序/网络服务器堆栈相同。

请注意,以下SE 帖子是解决方案的基础。还值得检查 MSFT 关于WSL vs WSL 2的参考。另请注意,我没有详细说明为什么需要这些步骤、为什么我们可能需要自定义主机名、../etc/hosts 中的 ipv6 选项、127.0.0.1 的含义、环回地址、WSL 2 和发行版管理,等等。这些主题超出了本文的范围。

简单场景:

  • nodeApp1:具有自定义主机名的节点应用程序服务器:端口 3010(或其他)上的“www.app1.com”
  • nodeApp2:具有自定义主机名的节点应用程序服务器:端口 3020(或其他)上的“www.app2.com”

每个 node.js 应用服务器(再次在 wsl 2 中运行)都可以从浏览器使用以下 URL 访问:

两个关键项目:

  • 要修改的正确 etc/hosts 文件位于 Windows 端(不是 WSL 发行版):C:\Windows\System32\drivers\etc\hosts(在Windows文件夹中是)。这是一个“热”更新,因此无需重新启动 WSL 2。这个场景的内容是:
127.0.0.1 localhost
127.0.0.1 www.app1.com
127.0.0.1 www.app2.com
255.255.255.255   broadcasthost

::1           localhost www.app1.com www.app2.com
Run Code Online (Sandbox Code Playgroud)
  • 请在C:\Users\"you"\.wslconfig 中添加以下内容(在Windows文件夹中是):
[wsl2]
localhostForwarding=true
Run Code Online (Sandbox Code Playgroud)
  • 注意:在 WSL 2 Ubuntu 发行版的 /etc/hosts 中有对此的引用。
  • 另请注意,这需要关闭 WSL 并重新启动。关闭终端是不够的。也不需要整个机器启动。只需运行:
wsl --shutdown (in Powershell) or 
wsl.exe --shutdown (within Ubuntu)
Run Code Online (Sandbox Code Playgroud)

然后重新启动 Windows 终端应用程序(或任何 WSL 终端)以访问更新的 WSL 2 环境。具有自定义 url/主机名的应用程序现在将在浏览器中永久运行,并且绕过了 WSL 2 的动态 IP。