节点哪个端口/ IP地址要监听azure ubuntu vm

时间:2013-10-23 20:35:24

标签: node.js ubuntu azure dns azure-virtual-machine

我在Azure上有一个Ubuntu虚拟机。我在azure管理门户中添加了一个enpoint:

NAME   PROTOCOL   PUBLIC PORT   PRIVATE PORT  LOAD-BALANCED SET
---------------------------------------------------------------
HTTP   TCP        80            80            -

我试着听听它:

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);

如果我进入并卷曲它就可以了:

$ curl localhost:80
Hello World

但如果我尝试通过subdomain.cloudapp.net访问它,则不会有任何回复。当公共IP地址访问时,它也不会返回任何内容。

我应该使用哪个端口和地址来监听我的节点应用程序以从外部访问它?

我是否需要其他Azure服务才能访问VM?

如果防火墙出现问题,我将如何启用公共访问?


编辑:

我检查了是否有防火墙,但没有:

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

编辑2:

配置了一个不同的ubuntu vm,但它仍然不起作用。试图重新启动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

4 个答案:

答案 0 :(得分:7)

不知道样品有什么问题。 以下是我的一系列步骤:

  1. 在WestUS中创建'Extra Small'Ubuntu Server 13.10实例。 (NEW->虚拟机 - >快速创建)
  2. 添加端点HTTP 80 - > 80(端点 - >添加 - >添加新的独立端点 - > HTTP,TCP,80,80)
  3. 安装nodejs(sudo apt-get install nodejs)。这将安装版本“v0.10.15”
  4. 使用您的代码创建server.js.
  5. 启动nodejs服务器(sudo nodejs server.js)
  6. 我可以通过ndtest2.cloudapp.net名称远程连接(已删除)并获取“Hello World”。

    编辑: 但是我无法连接到从源构建的版本。 但是如果我从http://nodejs.org

    下载二进制文件,我就可以连接

答案 1 :(得分:3)

你正在127.0.0.1或当地主持人上听。您需要在0.0.0.0上进行聆听,以解决此问题,替换

server.listen(80);

server.listen(80, "0.0.0.0")

为了澄清,0.0.0.0不是一个实际地址,它意味着所有地址,127.0.0.1和任何其他IP。

答案 2 :(得分:2)

使用azure,您需要使用环境变量process.env.PORT来设置端口。 如果在localhost上你想使用80,那么可以按照推荐here的方式在代码中设置它:

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

但是,请确保,如果您在Azure上运行VM,that the windows firewall is correctly set

答案 3 :(得分:1)

我相信您的端口不允许在端口80上进行远程连接,因为您可以使用外部的ssh隧道进入ubuntu VM。试试this answer。虽然它与apache有关,但这两个问题看起来很相似,而且它实际上是相同的。试试吧。

同时,祝你好运。手指交叉:p