我确信这是非常菜鸟的,所以请原谅我。我正在尝试在我的 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
我遇到过同样的问题。
我做了以下事情
- 在 Google Cloud Console 中,您需要启用用于 Nodejs 的端口
使用以下链接在 Ubuntu Server 上启用相同的端口 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04
在这最后一个之后,我缺少的是网络->防火墙规则->默认允许内部->所有 IP 地址 0.0.0.0/0
完毕