![](/img/trans.png)
[英]Is it possible to fetch a VM by IP address,without knowing resource group, in Node.js Runtime on Azure Function?
[英]node which port / ip address to listen to for azure ubuntu vm
我在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
不知道你的样品有什么问题。 这是我的一系列步骤:
我可以通过ndtest2.cloudapp.net名称远程连接(已删除)并获取“Hello World”。
编辑:但是我无法连接到从源代码构建的版本。 但是如果我从http://nodejs.org下载二进制文件,我可以连接
您正在侦听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。
使用azure,您需要使用环境变量process.env.PORT来设置端口。 如果在localhost上你想使用80,那么可以按照这里推荐的方式在代码中设置它:
server.listen(process.env.PORT || 80);
但是,请确保,如果在Azure上运行VM,则表明Windows防火墙已正确设置 。
我相信您的端口不允许在端口80上进行远程连接,因为您可以使用外部的ssh隧道进入ubuntu VM。 试试这个答案 。 虽然它与apache有关,但这两个问题看起来很相似,而且它实际上是相同的。 试试吧。
同时,祝你好运。 手指交叉:p
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.