如何通过公共 IP 地址访问我的 node.js 服务器?

Posted

技术标签:

【中文标题】如何通过公共 IP 地址访问我的 node.js 服务器?【英文标题】:How do I access my node.js server via public IP address? 【发布时间】:2020-08-04 17:59:08 【问题描述】:

我想通过在浏览器中输入我的公共 IP 地址来从远程 node.js 服务器获得响应。当我在我的个人计算机上的浏览器中输入我的公共 IP 时,我得到“无法连接”。我的 node.js 服务器没有连接到 World =(

我在 Linode 上运行 CentOS(但我认为这两种选择对我的问题都不重要)。 通过我的个人计算机(Mac)上的终端,我可以成功地以 root 身份通过 SSH 连接到我的 Linode。 我已经在我的 Linode 上成功安装了 node.js。 我可以在我的 Linode 上编译和运行一个简单的服务器。
var http = require('http');//create a server object:
http.createServer(function (req, res) 
  res.write('Hello World!'); //write a response
  res.end(); //end the response
).listen(3000, function()
 console.log("server start at port 3000");
);

我试过了:

设置主机名。 更改我服务器上的“hosts”文件。 在我的 node.js 服务器中更改端口号(3000、80、8080、3001、0.0.0.0 等)。 今天阅读了 100 篇有关如何部署 node.js 服务器的文章。 在 Google、***、Linode 论坛等中搜索可能对我有帮助的主题。

我对自己做错了什么一无所知,非常感谢您的帮助。

【问题讨论】:

你端口转发了吗? 这是我需要做的事情吗? 如果您在家中或本地网络上运行此程序,则需要进行端口转发。这可能因您的 ISP/调制解调器而异,因此我建议查找 your isp how to port forward node.js 服务器在远程 Linode 上运行,而不是我家或本地网络。 奇怪 - 您是否尝试过联系服务器提供商? 【参考方案1】:

我最终找到了答案,这要感谢 Saddy 提出的问题可能是端口转发的建议。

1. I decided to use ports 3080 and 3443 for my node server.
2. I SSHed into my CentOs instance.
3. I disabled the default firewall, firewalld.
4. I set up port forwarding using iptables with the following commands:

防火墙停止

防火墙禁用

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

iptables -I INPUT 1 -p tcp --dport 25 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3080

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3443

iptables-save > /etc/sysconfig/iptables

之后,我就可以通过浏览器访问我的节点服务器了。

【讨论】:

以上是关于如何通过公共 IP 地址访问我的 node.js 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?

如何防止直接访问 IP Express node.js

如何使我的 SpringBoot 应用程序可以通过我的公共 IP 地址访问?

无法通过本地网络中的公共 IP 地址访问我的 XAMPP

如何允许所有网络公共 ip 访问我的数据库? [关闭]

如何访问我的IIS服务器? (查找我的ISS IP地址)