호스트에서 VM의 레일 서버에 액세스할 수 없습니다.

호스트에서 VM의 레일 서버에 액세스할 수 없습니다.

가상 머신에 레일 서버가 있고 호스트에서 localhost에 액세스해야 합니다. NAT(포트 전달 - 게스트 측 포트 80 및 3000)와 브리지 어댑터를 모두 시도했지만 아무 것도 작동하지 않는 것 같습니다.

두 경우 모두 포트 80에 액세스할 수 있었지만 포트 3000에서 localhost에 연결하는 데 실패했습니다(따라서 xampp 서버에 액세스하는 데 문제가 없었습니다).

서버가 게스트 측에 있는 동안 호스트에서 localhost에 액세스하는 방법에 대해 알고 계시다면 알려 주시기 바랍니다.

게스트에는 Linux(debian)가 있고 호스트 측에는 Windows 7이 있습니다. VirtualBox를 사용합니다.

답변1

여기에는 최소한 세 가지 별도의 구성 요소가 있으며 각 구성 요소를 올바르게 구성해야 합니다.

레일스 바인딩 주소

Rails(또는 다른 서버 애플리케이션)가 네트워크 연결을 수신하기 위해 열리면 IP와 포트 모두에 바인딩됩니다. 들어오는 요청이 이 두 가지 모두와 일치하지 않으면 연결을 수락하지 않습니다. 에서 rails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

localhost따라서 기본적으로 Rails는 (루프백) 네트워크 어댑터( 라고 함 ) 로 전송된 요청만 수락합니다 lo. 이 어댑터는 동일한 컴퓨터 내에서만 액세스할 수 있으므로 Debian VM 자체 내에서만 허용되는 요청만 허용됩니다. 테스트용으로는 안전하지만 프로덕션에는 유용하지 않으며 다른 컴퓨터에서 테스트하는 경우에도 유용하지 않습니다.

Rails를 다른 컴퓨터(Windows 7 호스트 포함)에서 접근할 수 있게 하려면, 외부에서 접근할 수 있는 데비안의 IP 주소에 바인딩하도록 Rails에 지시해야 합니다(아래 참조).

그러나 더 쉬운 방법은 Rails에게 특수 IP 주소에 바인딩하도록 지시하는 0.0.0.0것입니다.모든 네트워크 어댑터. 따라서 Rails 서버를 다음과 같이 시작하십시오.

rails server -p 80 -b 0.0.0.0

네트워크에서 VM을 볼 수 있는 모든 사람이 웹 사이트에 액세스할 수 있게 됩니다.

이는 다른 두 구성요소가 작동 중이더라도 여전히 사용자를 혼란스럽게 만드는 원인일 수 있습니다.

VM IP 주소

브라우저는 자체 개별 컴퓨터인 Debian 가상 머신을 가리켜야 합니다.

경험상 localhost항상 동일한 컴퓨터를 참조한다는 것입니다. 그러나 네트워킹 목적으로 Debian VM은 별도의 컴퓨터입니다. Windows 7 호스트에서 웹 브라우저를 사용하는 경우 는 localhost항상 Windows 7을 참조하며 다른 것은 참조하지 않습니다.

여기에는 두 가지 옵션이 있습니다.

  • 귀하의 질문에서 언급한 대로 VirtualBox VM 어댑터를 브리지 모드로 설정하십시오. 이렇게 하면 데비안이 Windows 7 호스트와 동일한 외부/가정/직장 네트워크에 직접 배치됩니다. 그런 다음 를 실행하여 Debian VM의 IP를 확인할 수 있습니다 ifconfig. eth0또는 어댑터 의 IP를 찾으십시오 eth<something>. 이것을 브라우저의 주소 표시줄에 연결하세요.

  • NAT 어댑터를 사용하고VirtualBox 포트 포워딩. IMO는 더 복잡합니다.

데비안 방화벽

데비안에서 작업한 지 꽤 오래되어서 현재 기본값이 무엇인지는 모르지만, 위의 두 가지가 작동하지 않는다면 조사해 볼 가치가 있을 것입니다. 데비안이 방화벽을 실행하고 있다면, 다른 컴퓨터에서 접근하려는 포트를 열어야 합니다.

도움이 되었기를 바랍니다 :)

관련 정보