8

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

如果我 ssh 并卷曲它,它会起作用:

$ 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

4 回答 4

7

不知道你的样品有什么问题。这是我的有效步骤顺序:

  1. 在 WestUS 中创建“超小”Ubuntu Server 13.10 实例。(新->虚拟机->快速创建)
  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)

我可以通过 ndtest2.cloudapp.net 名称(已删除)远程连接并获得“Hello World”。

编辑:但是我无法连接到从源构建的版本。但如果我从http://nodejs.org下载二进制文件,我可以连接

于 2013-11-17T06:08:13.043 回答
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。

于 2013-11-10T19:46:20.930 回答
2

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

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

但是,如果您在 Azure 上运行 VM,请确保正确设置了 Windows 防火墙

于 2013-11-10T10:15:05.880 回答
1

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

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

于 2013-11-16T18:30:08.013 回答