如何通过公共 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 地址?