2013-10-23 51 views
8

我已經有一個Ubuntu虛擬機在Azure上。我在Azure管理門戶加入enpoint:節點哪個端口/ ip地址聽天藍色的Ubuntu vm

​​

我試着聽吧:

var http = require('http'); 

var server = http.createServer(function (request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.end("Hello World\n"); 
}); 

server.listen(80); 

它的工作原理,如果我ssh並捲曲它:

$ curl localhost:80 
Hello World 

但如果我嘗試通過subdomain.cloudapp.net訪問它,則無法返回。當通過公共IP地址訪問時,它也不會返回任何內容。

我應該使用我的節點應用程序監聽哪個端口和地址才能從外部訪問它?

我需要另一個Azure服務才能訪問VM嗎?

如果它是防火牆的問題,我將如何啓用公共訪問?


編輯:

我檢查,如果有一個防火牆,但沒有:

$ sudo ufw status 
[out :: subdomain.cloudapp.net] Status: inactive 

編輯2:

供應的不同Ubuntu的虛擬機,但它仍然不起作用。嘗試重新啓動iptables的,但沒有服務被稱爲:

$ sudo service iptables restart 
iptables: unrecognized service 

iptables的是:

$ sudo iptables -L 

Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 

ACCEPT  udp -- anywhere    anywhere    udp dpt:bootpc 
ACCEPT  tcp -- anywhere    anywhere    state NEW tcp dpt:http 


Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination 


Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 
+0

下載二進制文件你確認端口80在虛擬機的防火牆(iptables)中是否打開? –

+0

我如何確認? (這裏很新的服務器的東西) – AJcodez

+0

@DavidMakogon仍然不知道如何允許外部訪問,不知道它是否應該使用ACL? – AJcodez

回答

7

不知道你的樣品有什麼問題。 這是我工作的步驟順序:

  1. 在WestUS中創建'Extra Small'Ubuntu Server 13.10實例。 (新建 - >虛擬機 - >快速創建)
  2. 添加端點HTTP 80 - > 80(端點 - >添加 - >添加新的獨立端點 - > HTTP,TCP,80,80)
  3. 安裝nodejs(sudo apt - 請安裝nodejs)。此安裝版本'v0.10.15'
  4. 使用您的代碼創建server.js。
  5. 啓動服務器的NodeJS(須藤的NodeJS server.js)

我能夠通過ndtest2.cloudapp.net名(已刪除)遠程連接,並得到的 「Hello World」。

編輯: 但是我無法連接到從源代碼構建的版本。 但是我可以連接,如果我從http://nodejs.org

+0

啊。你使用apt-get nodejs?我做了以下內容:'add-apt-repository ppa:chris-lea/node.js'。我不應該這樣做嗎? – AJcodez

+0

我沒有指定使用哪一個。只需在clean vm上執行「sudo apt-get install nodejs」即可。 –

+1

「添加端點HTTP 80」 - Doh!非常感謝你! –

2

天青,你需要使用環境變量process.env.PORT設置端口。 如果在本地主機上要使用80,一個很好的方法來設置它在你的代碼以這種方式爲推薦here

server.listen(process.env.PORT || 80); 

不過,可以確定的是,如果你在Azure上運行一個虛擬機,that the windows firewall is correctly set

+0

我已經設置了端口,並且它的監聽正確。問題是我無法從外部訪問虛擬機。 – AJcodez

+0

你錯過了回答者的觀點。你需要監聽你所說的特定端口(通過process.env.PORT)。你不能聽你喜歡的任何端口。 –

+0

'port = process.env.PORT || 80''仍然不起作用 – AJcodez

3

您有可能在127.0.0.1或本地主機上收聽。您需要在0.0.0.0聽,要解決這個問題,更換

server.listen(80); 

server.listen(80, "0.0.0.0") 

只是爲了澄清,0.0.0.0不是acutal地址,這意味着所有的地址,127.0.0.1和任何其他IP地址。

+0

當我嘗試我得到'curl:(7)失敗連接到0.0.0.0:80連接rufused' – AJcodez

+0

@AJcodez ,請參閱最新的問題。 –

+0

我試過localhost,127.0.0.1,0.0.0.0,public vm ip,private vm ip all都沒有成功:( – AJcodez

1

我相信你的端口不允許在端口80上進行遠程連接,因爲你可以使用來自外部的SSH隧道進入Ubuntu虛擬機。嘗試this answer。雖然它與Apache相關,但這兩個問題看起來很相似,實際上是相同的。嘗試一下。

與此同時,最好的運氣。手指交叉:p