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

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

我确信这是非常菜鸟的,所以请原谅我。我正在尝试在我的 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 阻止某些端口之外,还有其他原因吗?我如何找出它是什么?

任何帮助都非常感谢!

答案1

感谢您添加最后一个 netstat 输出,它确实很有帮助。您无法从外部访问 node.js,因为它正在监听本地主机 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/');

答案2

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

正确的输出应该是这样的

0.0.0.0:8080

答案3

我遇到过同样的问题。

我做了以下事情

  1. 在 Google Cloud Console 中,您需要启用用于 Nodejs 的端口
  2. 使用以下链接在 Ubuntu Server 上启用相同的端口 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04

  3. 在这最后一个之后,我缺少的是网络->防火墙规则->默认允许内部->所有 IP 地址 0.0.0.0/0

看到这个图片

完毕

相关内容