Как настроить собственные имена хостов и порты для серверов (например, node.js), работающих в WSL 2

(в ответ я предоставил простое рабочее решение)

Недавно я перешел с macOS на WSL 2. У меня есть два сервера узлов, работающих в WSL 2 (дистрибутив Ubuntu). Каждый должен быть доступен через пользовательское имя хоста для целей разработки и производства. У меня были трудности с доступом к серверам узлов через настраиваемые имена хостов (например, заданные в каком-то файле ../etc/hosts), особенно с учетом динамического IP-адреса WSL 2, который меняется при загрузке WSL/pc. Как настроить собственные имена хостов в WSL 2?

Сценарий:

Каждый сервер приложений node.js (снова работающий в WSL 2) должен быть доступен из браузера со следующими URL-адресами/собственными именами хостов:


person MoMo    schedule 13.01.2021    source источник


Ответы (1)


После поиска вокруг я обнаружил, что работает следующий относительно простой процесс. Я решил поделиться и сэкономить время и головную боль для тех, кто плохо знаком с WSL 2. Обратите внимание, что хотя я использую узел в качестве стека сервера, этот процесс должен быть более или менее таким же для других стеков приложений/веб-серверов.

Обратите внимание на следующее SE пост является основой решения. Также стоит изучить справку MSFT по WSL и WSL 2. . Также обратите внимание: я не предоставил подробного обоснования того, почему необходимы эти шаги, почему нам могут понадобиться настраиваемые имена хостов, параметры ipv6 в ../etc/hosts, значение 127.0.0.1, петлевые адреса, WSL 2 и управление дистрибутивом, и т. д. Это темы, выходящие за рамки этого поста.

Простой сценарий:

  • nodeApp1: сервер приложений узла с произвольным именем хоста: «www.app1.com» на порту 3010 (или любом другом)
  • nodeApp2: сервер приложений узла с пользовательским именем хоста: «www.app2.com» на порту 3020 (или любом другом)

К каждому серверу приложений 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
  • Добавьте 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-адресами/именами хостов теперь будут работать в браузере постоянно, а динамический IP-адрес WSL 2 обойден.

person MoMo    schedule 13.01.2021