Vagrant의 포트 전달이 작동하지 않음 [닫힘]


108

대한 시작하기 가이드vagrant 의 끝에 작은 문제 있습니다. Apache2가 실행중인 CentOS베이스 박스에서 작업 중입니다 (Puppet을 통한 프로비저닝). 다음 줄을 사용하여 웹 요청에 대한 포트 전달을 설정했습니다 Vagrantfile.

 config.vm.forward_port "web", 80, 4567

그러나 해당 포트에 요청을하면 실패합니다. Safari에서보고 된 오류는 ' 서버가 예기치 않게 연결을 끊었 기 때문에 Safari에서 " http : // localhost : 4567 / " 페이지를 열 수 없습니다 . "입니다.

내가했던 vagrant reload및 톱 "[기본] - 웹 : 80 => 4567 (어댑터 1)"스크롤에, 그래서 어디이 문제를 해결하기 시작해야 하는가? 감사.


1
무엇합니까 curl -v 'http://localhost:4567/'말은? 때때로 Safari는 오류 메시지를 숨기는 데 너무 좋습니다.
Steve Losh

2
또한 curl 'http://localhost:80'VM 자체에서 작동합니까? 그렇지 않다면 문제는 포트 포워딩이 아닙니다.
Steve Losh

4
curlVM 내에서 @Steve Losh 가 작동합니다. curl호스트에서 나에게 준다 (52) Empty reply from server.
Hank Gay


나를 위해 심포니 3과 함께했습니다.-sudo php bin / console server : run을 실행하면 127.0.0.1:8000에서 서버를 실행하면 웹 브라우저에서 액세스 할 수 없으며 가상 머신에서 컬에 액세스 할 수 있습니다. 웹 디렉토리에서 sudo php -S 0.0.0.0:8000을 실행하면 127.0.0.1:8082/app_dev.php에 액세스 할 수 있습니다 . 왜 이런 일이 발생하는지 이해하지 못하지만 작동합니다.
Darius.V

답변:


80

나는 이것을 더 많은 의견 대신 실제 대답으로 만들 것입니다.

먼저 curl 'http://localhost:80'VM 내에서 시도 하십시오. 작동하지 않으면 포트 포워딩이 아닙니다.

다음 : curl -v 'http://localhost:4567/'호스트 컴퓨터에서 시도 하십시오. Curl은 Safari보다 더 나은 오류 메시지를 제공 할 수 있습니다.

포트 80에 대한 액세스를 제한하는 방화벽이 설정되어 있지 않은지 확인하겠습니다. 기본 Vagrant VM (Ubuntu)에는 방화벽이 설정되어 있지 않지만 다른 것을 사용하고 있다고 말 했으므로 그만한 가치가있을 수 있습니다. 확인하다.

그렇지 않은 경우 포트 80에 나열된 Apache 이외의 것을 만들어보십시오. Python은 사용할 수있는 간단한 HTTP 서버와 함께 제공됩니다.를 사용하여 폴더로 이동하여 index.html실행 sudo python -m SimpleHTTPServer 80한 다음 두 상자에서 모두 curl을 사용해보십시오. 작동한다면 Apache 구성 문제 일 수 있습니다. 이 경우 도움이 될 Apache에 대한 충분한 경험이 없습니다 (저는 nginx를 사용합니다).


14
기본적으로 나는 RedHat과 iptables. 기본 정책이 ACCEPT들어오는 연결 에 대한 것인지 확인 했지만 체인 REJECT의 마지막 규칙으로 포괄 규칙 이있는 RedHat의 사용자 지정 규칙 체인에는주의를 기울이지 않았습니다 . tl; dr 나는 도중에 방화벽이 있었는데 눈치 채지 못했습니다.
Hank Gay

감사! 그 교활한 방화벽 규칙이 RHEL 5.5에서 내 문제를 일으킨 원인입니다.
Roosh 2012-06-25

확인하는 아주 간단한 방법이기 때문에 아래에 Robert의 의견을 다시 인쇄합니다. service iptables stop루트로 실행 하여 게스트 방화벽 문제를 신속하게 배제합니다. 필요한 경우 나중에 다시 활성화하십시오.
Arnaud Meuret 2013 년

1
이상한 centos 이미지와 동일한 문제가있었습니다. iptables거의 모든 것을 제한하고있었습니다. 나는이 iptable centos 가이드 ( 섹션 3 Writing a Simple Rule Set의 솔루션 )를
따랐고

나 내부에서 작업 한 곱슬 곱슬에 대한 그래서 난 네트워킹 활성화 Vagrantfile및 실행 된 명령vagrant reload
abhirathore2006

266

127.0.0.1루프백 인에 바인딩하기 때문에 VM 내의 서버로 인해 종종 발생한다는 추가 메모를 추가하고 싶었습니다 . 0.0.0.0모든 인터페이스가 액세스 할 수 있도록 서버가 바인딩되어 있는지 확인해야 합니다.

Django의 개발 서버 및 일부 Ruby 서버와 같은 일부 내장 앱 서버 127.0.0.1는 기본적으로 기본 설정되어 있으므로주의해야합니다.

그 외에는 스티브가 말한 내용이 사실입니다. VM 내에서 작동하는지 확인하고 다른 간단한 서버를 사용해 구성 문제인지 확인합니다.


8
이것은 webrick을 실행하는 shotgun에 필요한 수정 사항입니다.
Ronze 2013

이것은 나를 위해 문제를 해결했습니다. Torquebox를 0.0.0.0에 바인딩하려면 다음 명령을 사용하여 실행하십시오. torquebox run -b 0.0.0.0
Bartek Skwira

3
네 이것이 문제였습니다. 0.0.0.0에 바인딩해야합니다. Vagrant가 미래에이 문제를 자동으로 해결할 수있는 방법이 있는지 궁금합니다.
CMCDragonkai 2014 년

1
sinatra와 webrick의 동일한 문제 : "set : bind, '0.0.0.0'"이 문제를 해결했습니다.
pragmatic_programmer

이것은 나를위한 수정이었습니다
sixty4bit

33

NGINX가있는 CentOS 6.3에서 동일한 문제가 발생했으며 방랑 상자의 iptables에 답이 있다는 것을 알았습니다.

방랑 상자의 bash에서 다음 단계를 따르십시오.

현재 iptable 규칙을 먼저 나열

iptables -L -v

그런 다음 현재 규칙을 플러시합니다.

iptables -F

TCP 포트 22에서 SSH 연결 허용

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

INPUT, FORWARD 및 OUTPUT 체인에 대한 기본 정책 설정

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

localhost에 대한 액세스 설정

iptables -A INPUT -i lo -j ACCEPT

설정된 연결 및 관련 연결에 속하는 패킷 허용

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

설정 저장

/sbin/service iptables save

수정 된 규칙 나열

iptables -L -v

Curl localhost : [port #] 또는 외부 방랑자 브라우저에서 누르십시오.

CentOS iptable 구성에 대한 자세한 정보는 여기에서 찾을 수 있습니다.

http://wiki.centos.org/HowTos/Network/IPTables

행운을 빕니다.


2
작성해 주셔서 감사합니다. Fedora 18에서 이와 동일한 문제가 발생했기 때문에 CentOS에만 국한되지 않습니다. 다른 사람에게 도움이되기를 바랍니다. :)
Benjamin Oakes 2013

4
이것은 CentOS의 저였습니다. service iptables stop
Robert

2
iptables -F혼자서 나를 위해 했어요
code_monk

동일한 문제를 해결하기 위해이 블로그 게시물에 나열된 일부 exec 명령으로 이에 대한 확실한 해결책을 찾았습니다. techie-notebook.blogspot.com/2014/05/… 내 경로를 $ {os_path} 섹션으로 바꿔야했습니다. 해당 변수를 사용할 수 없습니다.
Joshua Fricke 2016 년

27

나에게 더 나은 해결책은 방화벽을 비활성화하는 것입니다.

service iptables stop
chkconfig iptables off

+1 나를 위해 일했습니다. 로컬 VirtualBox 인스턴스를 사용하기 위해 방화벽이 필요하지 않았습니다.
Eduardo

임시 수정 싶다면 그것은 좋은 트릭입니다
brrystrw

0

Mitchell과 같은 다른 메모도 추가하고 싶습니다. 제 경우에는 80에서 6789로 전달합니다.

$ curl -v http://localhost:6789

그리고 나는

<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>

그런 다음 대신 IP 주소를 사용했으며 올바른 html 메시지를 받았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.