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

Mik*_*ont 21 ubuntu iptables port node.js

我敢肯定这是非常noobish,所以请原谅我。我正在尝试在我的 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
Run Code Online (Sandbox Code Playgroud)

这是 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
Run Code Online (Sandbox Code Playgroud)

为什么 8080 被视为封闭的?添加这个没有帮助:

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

我真的很困惑。

我会添加这个,以防它有帮助,但我不知道

 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
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是:我将如何调试这个?除了 iptables 阻止某些端口之外,还有其他东西吗?我如何知道它是什么?

非常感谢任何帮助!

小智 33

感谢您添加最后的 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/');
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用 (2认同)

小智 5

根据您的 netstat 输出,端口 8080 仅对本地主机 127.0.0.1 开放,因此从服务器访问(本地主机)是有效的,但不能从其他任何地方访问。

正确的输出应该是这样的

0.0.0.0:8080
Run Code Online (Sandbox Code Playgroud)