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.