localhost를 통해서만 WSL2 Ubuntu 가상 머신에 액세스할 수 있고 127.0.0.1에는 액세스할 수 없는 이유는 무엇입니까?

localhost를 통해서만 WSL2 Ubuntu 가상 머신에 액세스할 수 있고 127.0.0.1에는 액세스할 수 없는 이유는 무엇입니까?

저는 가상 머신에 대한 경험이 거의 없습니다. WSL2와 ubuntu 20을 성공적으로 설치한 다음 LAMP 스택을 설치했습니다. 모두 잘 작동하지만 Windows 시스템에서 브라우저를 사용할 때 locahost를 사용하여 가상화된 우분투의 아파치에만 액세스할 수 있습니다. 127.0.0.1은 접근이 불가능하다고 나오네요. 호스트의 모든 개발 도메인이 127.0.0.1을 가리키고 있으므로 당연히 작동하지 않습니다.

아파치 포트 conf는 다음과 같습니다

    Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule> 

가상 호스트는

<VirtualHost *:80>
or <VirtualHost *:443>

그러나 로그를 보면 127.0.0.1에 대한 요청이 아파치에도 도달하지 않은 것처럼 보입니다. 이는 브라우저에 '접근할 수 없습니다'라는 메시지가 표시되는 점을 고려하면 의미가 있습니다.

내가 보고 있어야 할 방향을 알려줄 수 있는 사람이 있나요?

감사해요.

답변1

의견을 보내주셔서 감사합니다. 이 전체 wsl2 우분투 설정 가이드의 끝 부분에서 솔루션을 찾았습니다. 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가 더 이상 사용되지 않아 내가 사용한 버전이 ifconfig가 아닌 첫 번째 줄에 ip addr을 사용하기 때문입니다.다른 곳에서 읽으면 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";
}

이것을 실행하고 나면 Windows 머신 LAN IP에 액세스하여 가상 머신의 Apache에 액세스할 수 있어야 하며 분명히 127.0.0.1은 머신 자체에서 작동합니다.

테스트한 후 가상 머신이 시작될 때 포트 전달 변경이 발생하도록 .profile에서 실행하도록 설정했습니다.

/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe "C:\Users\user\wsl-networking-startup-ip-change.ps1"

관련 정보