У меня очень мало опыта работы с виртуальными машинами. Я успешно установил WSL2 и Ubuntu 20, а затем установил стек LAMP. Все работает отлично, но при использовании браузера на моей машине Windows я могу получить доступ к Apache на виртуализированном Ubuntu только с помощью locahost. 127.0.0.1 говорит, что он не может быть достигнут. У меня все мои домены разработки направлены на 127.0.0.1 в hosts, так что, конечно, это тоже не работает.
Конфигурация портов Apache:
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Виртуальные хосты
<VirtualHost *:80>
or <VirtualHost *:443>
НО из журналов следует, что запросы к 127.0.0.1 даже не доходят до Apache, что вполне объяснимо, учитывая сообщение «невозможно получить доступ» в браузере.
Может ли кто-нибудь указать мне направление, в котором мне следует искать?
Спасибо.
решение1
Спасибо за комментарии. Нашел решение ближе к концу всего этого руководства по настройке wsl2 ubuntu здесь: https://dev.to/aitorsol/wsl2-windows-linux-subsystem-a-guide-to-install-a-local-web-server-ubuntu-20-04-apache-php8-y-mysql8-3bbk
Скрипт, включенный в этот пост, немного несовместим с моей системой, поскольку ifconfig устарел, поэтому версия, которую я использовал, использует ip addr в первой строке вместо ifconfig.Из прочтенного в другом месте, eth0 может не использоваться в вашей системе, поэтому вам может потребоваться настроить первую строку в соответствии с адаптером.
Отредактируйте в скрипте порты, которые вы хотите перенаправить на виртуальную машину.
:
$remoteport = bash.exe -c "ip addr list eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
#[Ports]
#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000,8080);
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
После того, как вы запустите это, вы сможете получить доступ к Apache на виртуальной машине, обратившись к IP-адресу локальной сети вашей машины Windows, и, очевидно, 127.0.0.1 работает на самой машине.
После тестирования я настроил запуск из .profile, чтобы изменения переадресации портов происходили при запуске виртуальной машины.
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe "C:\Users\user\wsl-networking-startup-ip-change.ps1"