我正在尝试在 Ubuntu 12.04 上打开端口 3000,因为我有一个 Web 服务器正在监听该端口。我有点不适应,花了很多时间尝试解决这个问题,但没有成功。
端口似乎在防火墙中打开:
$> sudo ufw status
Status: active
To Action From
-- ------ ----
...
3000/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere (v6)
服务器正在监听该端口:
$> netstat -an | grep "LISTEN "
...
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
...
我甚至可以wget
修改索引页:
$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK
并且接收到的文件包含我所期望的内容(“hello world”:)。
但是,当从另一台计算机尝试时,或者如果我wget mydomain.com:3000
得到"connection refused"
,并且 nmap 告诉我端口未打开:
$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux
知道下一步我应该尝试什么吗?
编辑
以下是 traceroute 提供的结果:
$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
1 mydomain.com (176.31.x.x) 0.034 ms 0.013 ms 0.010 ms
答案1
如果您的服务器只监听本地主机接口,您将无法从远程计算机访问它。这似乎是您的主要问题,因为您的 netstat 输出中只列出了 127.0.0.1:3000。
您还需要确保“mydomain.com”解析为您的机器的正确 IP 地址,这样连接到该地址将导致与该机器的外部接口进行通信。
答案2
我最近在使用 nodejs HTTPS 服务器时遇到了这个问题,解决方法不是使用“localhost”、“127.0.0.1”甚至域名。而是使用“0.0.0.0”
我相信这是一个通配符,现在允许通过域名进行公开解析,并且它也可以与“localhost”一起使用
编辑:这是有关 0.0.0.0 主题的 serverfault 页面的链接:https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1
答案3
您是否正在使用 AWS 或任何其他云服务?在这种情况下,应在云服务级别打开端口。特别是在 AWS 中,您应该寻找需要打开对端口 3000 的访问的“安全组”。
答案4
对于不使用的人来说ufw
,它似乎iptables
在 Ubuntu 中默认启用,并且必须明确授权此类流量:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT