我有一个 Ubuntu 16.04 虚拟机,当我运行curl http://192.168.254.42
(eth0 IP 地址)时,它会快速回复连接被拒绝。但是,服务器肯定在监听,0.0.0.0
并且可以被网络上的其他计算机使用浏览器中的相同地址访问。curl http://192.168.254.1
返回我的路由器管理页面的 html。
当然,这通常不会成为阻止程序,但这也意味着连接到服务器的 VPN 客户端无法使用 eth0 IP 地址(网络上的客户端使用)访问服务器本身。我以前从未遇到过这个问题,Google 提出了明显的“在 localhost 上侦听”,而这里并非如此。
我可以从终端 ping eth0 ip 地址(即 ping 自身),它会正确响应。来自 VPN 客户端的跟踪路由看起来也正确。但是访问http://192.168.254.42会立即响应连接被拒绝。
这里是netstat -tulpn
输出。
$ netstat -tulpn | grep :80
tcp6 0 0 :::80 :::* LISTEN 5724/index-lib
$ netstat -tulpn | grep :85
tcp6 0 0 :::85 :::* LISTEN 1212/server.js
$ netstat -tulpn | grep :81
tcp6 0 0 :::81 :::* LISTEN 1515/apache2
将其设置为端口 86 即可。另一个 NodeJS 服务器也在 85 端口上运行,可以正常访问。所以这不是 NodeJS 方面的问题。
旧信息
网络服务器是一个单一的 NodeJS v10.16.3 HTTP 服务器实例,监听0.0.0.0
.
听192.168.254.42
也行不通。
更重要的是,可以正常访问监听 81 端口的 Apache Web 服务。
Chrome 说ERR_CONNECTION_FAILED
,但它几乎立即执行。
没有设置 iptables 规则。
NodeJS 进程正在侦听端口 85,并且可以以相同的方式访问。
这里是netstat -tulpn
输出。
$ netstat -tulpn | grep :80
tcp6 0 0 :::80 :::* LISTEN 5724/index-lib
$ netstat -tulpn | grep :85
tcp6 0 0 :::85 :::* LISTEN 1212/server.js
$ netstat -tulpn | grep :81
tcp6 0 0 :::81 :::* LISTEN 1515/apache2
我用来检查的命令是
$ curl http://192.168.254.42
curl: (7) Failed to connect to 192.168.254.42 port 80: Connection refused
端口 81 和 85 返回预期的 HTML。
将其设置为侦听端口 86 使其可以访问!所以它不在 NodeJS 方面,我不认为。
我没有代表发表评论要求澄清,所以我只想对答案进行抨击。您正在谈论您的节点应用程序正在侦听的 IP 地址,但是我从来没有在我的任何节点应用程序中配置它。我猜你的代码看起来像这样:
此处的端口和 ip 都是可选的,因此如果您想在端口 80 上监听,那么只需将它们都丢弃即可。如果您正在侦听不同的端口,请放弃 IP 并让 Node 解决。
您在 81 上提到了 Apache 服务器,我假设您正在尝试直接连接到 Node,并且您没有通过 Apache 访问 Node。
如果以上内容不能帮助从您的节点应用程序发布相关代码,则
cat /etc/hosts
和sudo netstat -tulpn
. 如果您要通过 Apache,那么还要发布相关的 Apache 配置(即 中的虚拟主机条目/etc/apache2/sites-enabled/
)。我在
/etc/rc.local
.iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
发现问题!
这个答案说明了为什么规则没有出现在
iptables -L
:https ://serverfault.com/a/685948/32875 。