无法从外部访问node.js

4

我已经在各处寻找关于这个问题的答案,但是没有什么运气。

我已经在我的服务器上安装了node.js。我创建了标准的“Hello World”示例,如下:

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8080, "0.0.0.0");

console.log('Server running at http://0.0.0.0:8080/');

在服务器上运行脚本后:
node app.js

我可以连接到内部的808端口并看到“Hello World”消息,但是当我尝试从外部连接到我的服务器的8080端口时,会出现“无法连接到服务器”的错误。我还在我的监听函数中尝试了这个:

etc..
}).listen(8080, "204.xxx.xxx.xxx");

我尝试获取我的真实外部IP地址,但一直没有成功。

我试过在iptables中添加以下内容来接受8080端口的连接:

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

但我还是遇到了一些问题。当我运行netstat命令时,会得到以下结果:
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               

我认为这告诉我8080端口正在监听连接。

那么,我在这里做错了什么?


操作系统防火墙软件怎么样? - Eve Freeman
1个回答

3

你很可能在使用网络地址转换(NAT)。

如果你使用的是普通家庭互联网连接,并且有一个网关路由器,那么可以有多个设备使用你家里的互联网连接(通过以太网或Wifi连接),对吧?

但你只有一个IP地址。

为了实现这一点,路由器允许你进行外部连接,但不允许任何从外部启动的连接返回(为了简化问题而言 - 如果需要更多信息,请查阅相关资料)。

你需要考虑配置端口转发 - 你需要将外部端口8080转发到你电脑的内部IP地址。


这实际上是托管在Slicehost上的。 - tptcat
@tptcat 那么端口应该是开放的,我不知道该说什么 - 你尝试使用 nmap 诊断连接问题了吗? - Borealid
我搞定了。我发现我用来添加端口8080到iptables的东西实际上并没有生效(我猜测)因为有一个真正的iptables文件被用于规则。一旦我在我的iptables文件中添加了端口8080,一切都好了。 - tptcat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接