虽然我研究了一整天,但仍然找不到解决这个问题的方法。
在我的 Ubuntu 服务器上,我尝试运行一个 node.js 应用程序,该应用程序仅打印出“Hello World”并在端口 3000 上运行。我希望不仅能够在我的本地主机上访问此端口,而且还能够在我的实时网站地址上访问此端口。
运行后sudo netstat -ntlp
,我得到以下信息:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 58639/mysqld
tcp 0 0 0.0.0.0:9418 0.0.0.0:* LISTEN 585/git-daemon
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 839/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 839/dovecot
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 792/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 17862/master
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 889/ajenti-panel -d
tcp 0 0 0.0.0.0:5314 0.0.0.0:* LISTEN 947/BackupFP
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 838/nrpe
tcp6 0 0 :::3300 :::* LISTEN 26390/apache2
tcp6 0 0 :::9418 :::* LISTEN 585/git-daemon
tcp6 0 0 :::110 :::* LISTEN 839/dovecot
tcp6 0 0 :::143 :::* LISTEN 839/dovecot
tcp6 0 0 :::80 :::* LISTEN 26390/apache2
tcp6 0 0 :::22 :::* LISTEN 792/sshd
tcp6 0 0 :::3000 :::* LISTEN 52768/index.js
tcp6 0 0 :::25 :::* LISTEN 17862/master
tcp6 0 0 :::443 :::* LISTEN 26390/apache2
tcp6 0 0 :::5666 :::* LISTEN 838/nrpe
我们注意到端口似乎已打开,甚至正在运行
curl exampleAddress.com:3000
结果是,Hello World
但它无法在互联网上工作。使用此端口检查工具端口似乎仍处于关闭状态。请记住,我只是试图访问已启动并运行的网站的额外端口,该网站在端口 443 上运行(它在 SSL 上运行,这可能很重要)。
我已经通过运行确保防火墙不是问题:sudo ufw allow 3000
甚至尝试完全禁用防火墙。
是否存在我遗漏的 Apache 配置,因为端口 443、80 和 22 是开放的,但我没有看到具体的区别。
答案1
我可以看到进程 index.js 正在监听端口 3000、协议 IPv6 (tcp6),但没有监听协议 IPv4 (tcp)。
您需要检查您的 NodeJS 设置并让它也在 IPv4 上监听。
然后你可以用curl -4 exampleAddress.com:3000