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

问题描述 投票:0回答:1

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

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

场景:

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

windows-10 hostname wsl-2 hosts-file
1个回答
19
投票

经过搜索,我发现以下相对简单的过程有效。我想我应该分享并为那些刚接触 WSL 2 的人节省一些时间和头痛。注意,虽然我使用节点作为服务器堆栈,但此过程对于其他应用程序/Web 服务器堆栈应该或多或少是相同的。

注意以下SE 帖子是解决方案的基础。还值得查看 MSFT 关于 WSL 与 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 tc\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
  • 请添加 C:\Users\"you"\.wslconfig 并包含以下内容(是的,在 Windows 文件夹中):
[wsl2]
localhostForwarding=true
  • 注意:WSL 2 Ubuntu 发行版的 /etc/hosts 中有对此的引用。
  • 另请注意,这需要关闭 WSL 并重新启动。关闭终端是不够的。另外机器启动也不是 必需的。只需运行:
wsl --shutdown (in Powershell) or 
wsl.exe --shutdown (within Ubuntu)

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

© www.soinside.com 2019 - 2024. All rights reserved.