2011-05-12 57 views
95

我在Getting Started guide for vagrant的末尾遇到了一個小問題。我正在研究運行Apache2的CentOS basebox(通過Puppet進行配置)。我已經設置了端口轉發使用以下行Vagrantfile Web請求:Vagrant的端口轉發不起作用

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

但是,當我提出請求到該端口,他們失敗了。 Safari報告的錯誤是'Safari無法打開頁面'http://localhost:4567/「,因爲服務器意外丟棄了連接。

我做了一個vagrant reload,並在滾動條中看到了「[default] - web:80 => 4567(adapter 1)」,那麼我應該在哪裏開始排除故障?謝謝。

+1

什麼'捲曲-v的 'http://本地主機:4567 /''說什麼?有時Safari在隱藏錯誤信息方面有點太棒了。 – 2011-05-12 20:46:56

+2

另外,從虛擬機本身'捲曲'http:// localhost:80''是否工作?否則,問題不是端口轉發。 – 2011-05-12 20:47:49

+3

@Steve Losh'curl'在虛擬機內工作。來自主機的'curl'給我'(52)來自服務器的空回覆。 – 2011-05-12 20:58:19

回答

71

我會讓這個實際的答案,而不是更多的意見。

第一件事:從虛擬機內嘗試curl 'http://localhost:80'。如果這不起作用,那絕對不是端口轉發。

下一個:從您的主機嘗試curl -v 'http://localhost:4567/'。 Curl可能會給你一個比Safari更好的錯誤信息。

我會檢查是否沒有防火牆設置限制對端口80的訪問。默認的Vagrant VM(Ubuntu)沒有設置防火牆,但是你說你正在使用其他東西,所以它可能值得檢查。

如果這不是它,嘗試使比Apache等你可以使用一個簡單的HTTP服務器端口80上的Python船舶列出的東西 - 轉到文件夾index.html和運行sudo python -m SimpleHTTPServer 80,然後嘗試打與來自捲曲框。如果這可行,那麼它可能是一個Apache配置問題。如果是這種情況,我沒有足夠的經驗來幫助Apache(我使用nginx)。

+13

基本上,我吮吸RedHat和'iptables'。我檢查了一下,確保默認策略對於傳入連接是「ACCEPT」,但沒有注意到RedHat的自定義規則鏈,該規則鏈有一個全面的「REJECT」規則作爲鏈中的最後一條規則。 tl; dr我有一個防火牆,只是沒有注意到。 – 2011-05-14 12:53:49

+0

謝謝!這個偷偷摸摸的防火牆規則是我在RHEL 5.5上遇到的問題。 – Roosh 2012-06-25 15:07:23

+0

我重印了Robert的評論,因爲它是檢查這樣一個微不足道的方法:運行'service iptables stop'作爲根目錄快速排除訪客防火牆問題。如果需要,稍後重新啓用它。 – 2013-05-13 10:29:18

233

我想添加一個額外的注意事項,通常這是由VM中的服務器引起的,因爲它綁定到127.0.0.1,這是回送。您需要確保服務器綁定到0.0.0.0,以便所有接口都可以訪問它。

一些內置應用服務器,如Django的開發服務器和一些紅寶石服務器默認爲127.0.0.1默認所以這是值得提防。

除此之外,什麼史蒂夫說也是如此:請確保它在虛擬機內的作品,並嘗試一些其他簡單的服務器,試圖弄清楚它是否是一個配置問題。

+8

這是修復霰彈槍運行webrick。 – Ronze 2013-02-21 20:15:54

+0

這解決了我的問題。綁定Torquebox到0.0.0.0運行它:torquebox運行-b 0.0.0.0 – 2013-08-23 07:47:25

+3

是的,這是問題所在。需要綁定到0.0.0.0。我想知道是否有一種方法可以讓Vagrant在未來自動解決這個問題? – CMCDragonkai 2014-06-02 03:54:35

0

我想添加另一個像Mitchell的筆記。如果我的情況下,我把它轉發到6789,從80

$ curl -v http://localhost:6789 

而且我得到了

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

然後,我使用的IP地址,而不是,它得到正確的HTML郵件。

32

我在CentOS 6.3 w/NGINX上遇到了同樣的問題,並發現答案在流浪盒上的iptables中。

從在漂浮的盒子慶典,請按照下列步驟操作:

首先列出當前的iptable規則

iptables -L -v 

然後刷新當前的規則:

iptables -F 

允許TCP端口22上的SSH連接

iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
輸入個

設置默認政策,FORWARD和OUTPUT鏈

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

本地主機

iptables -A INPUT -i lo -j ACCEPT 

接受屬於建立相關的連接

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

保存設置數據包設置訪問

/sbin/service iptables save 

列表修改規則

iptables -L -v 

捲毛本地主機:端口號]或從外部遊民打在你的瀏覽器

更多信息在CentOS這裏找到的iptable CONFIGS:

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

祝你好運。

+2

謝謝你寫這篇文章。我在Fedora 18上遇到了同樣的問題,所以它不是特定於CentOS的。我希望能幫助別人。 :) – 2013-02-11 20:23:28

+4

這是我在CentOS上。 '服務iptables停止' – Robert 2013-04-22 19:09:01

+2

'iptables -F'本身爲我做的 – 2015-02-15 14:56:47

27

對我來說更好的解決辦法是禁用防火牆

service iptables stop 
chkconfig iptables off 
+0

+1爲我工作。對於使用本地VirtualBox實例,我不需要防火牆。 – Eduardo 2013-06-04 08:59:43

+0

如果你想臨時修復,這是一個很好的竅門 – ramirio 2015-07-10 14:13:01