无法从Ubuntu上的外部IP访问Node.js


18

我敢肯定这是很讨厌的,所以请原谅我。我正在尝试在Ubuntu 10.04的端口8080上运行一个node.js服务器。

这是服务器上iptables -L的结果:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

这是nmap -p 8080的结果(编辑了ip地址,因为一切都应该或应该完全打开)

nmap 173.203.xxx.xxx -p 8080 -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
Interesting ports on xxx (173.203.xxx.xxx):
PORT     STATE  SERVICE    VERSION
8080/tcp closed http-proxy

为什么地球上8080被视为封闭?添加此内容无济于事:

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT

我真的很困惑

如果有帮助,我将添加它,但是我不知道

 netstat -pan | grep 80
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2

我可以从apache的80端口运行我的常规网站,但是无法从外部访问node.js服务器。从服务器本身访问它可以正常工作。

所以我的问题是:我该如何调试呢?除了iptables阻止某些端口之外,还有其他东西吗?我如何找出它是什么?

任何帮助,不胜感激!


对于那些通过Google来到这里的用户:如果您已将服务托管在Google云上,并且遇到了此问题,请首先确保已在云防火墙和操作系统防火墙的例外规则中添加了该端口
Atul

Answers:


30

感谢您添加最后一个netstat输出,它确实有所帮助。您无法从外部访问node.js,因为它正在监听localhost IP(即127.0.0.1)。您需要将node.js配置为侦听0.0.0.0,以便它能够接受计算机所有IP上的连接。

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');

我对此表示怀疑,但之前从未遇到过0.0.0.0,因此无视它。我应用了您的修复程序,就这样了,谢谢!
Mikael Gramont

我也有这个问题。我遵循了此代码,但是仍然无法从外部访问我的nodejs服务器。
xybrek

是的,这里也一样。

1
不适用于我
Jitendra Pancholi'1

在Mac OS Sierra的Node v8.1.3上对我不起作用
Liran H

4

根据您的netstat输出,端口8080仅对127.0.0.1(即localhost)开放,因此从服务器(即localhost)进行访问是可行的,但无法从其他任何地方进行访问。

正确的输出应如下所示

0.0.0.0:8080

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.