如何从任何 ip 连接到 node.js 服务器
Posted
技术标签:
【中文标题】如何从任何 ip 连接到 node.js 服务器【英文标题】:How to connect to node.js server from any ip 【发布时间】:2021-11-07 01:37:37 【问题描述】:我想为我想要制作的应用程序创建一个私有后端,但我无法连接到我的节点服务器,我现在有基本的东西,
var http = require("http");
http.createServer(function (req, res)
res.writeHead(200, 'Content-Type': 'text/html');
res.end('<html><body><h1>Hello World</h1></body></html>');
).listen(3000);
console.log('Server running on port 300.')
但这仅适用于 https://localhost:3000/,我该如何制作,以便如果我在单独的连接上有一台单独的计算机,我可以连接到该服务器?
我对只向所有人开放它不感兴趣,而只是对特定的客户端 IP 开放...
【问题讨论】:
您是否检查了端口 3000 的防火墙设置? 【参考方案1】:如果客户端 IP 与您在同一网络上,您可以查看this question
如果您希望来自任何地方的人访问您的应用程序,我建议将其托管在 Heroku 之类的东西上(非常易于部署,非常好的免费层)。然后,您可以在 express 应用程序中创建 IP 白名单。
【讨论】:
【参考方案2】:我建议在您的路由器中使用 ngrok 或配置进行任何端口转发
要下载 ngrok https://ngrok.com/ 去这个链接
要配置您的路由器,需要根据您使用的路由器类型在 Google 中进行一些搜索
你必须提到你的 localhost 或 Nat Ip 和你要在这里解析的公共 IP 是 NOIP refrence https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/
【讨论】:
好的,谢谢,这看起来像我要找的东西!【参考方案3】:正如您指定的那样,您希望后端是私有的,这样它只能由您指定的节点访问。您必须将此节点服务器托管在云服务上,或者您可以通过打开节点服务器的端口将其托管在本地计算机上。假设您将节点服务器托管在本地计算机 IP 地址的端口 1234
上。
您可以在 localhost 和所需端口上启动节点服务器,但您需要允许对特定端口的请求。
现在您需要检查您的节点服务器接收的请求的来源并对其进行验证,以便只有您的私有节点(计算机)可以访问节点服务器。您可以通过使用 express 验证主机名来做到这一点,您可以使用 req.hostname
或 req.headers.host
在 express.js 中获取请求的主机名。
你需要使用 express.js 来实现这个功能,代码如下
let express = require('express');
let app = express();
let allowedHost = 134.32.234.3 // the hostname which is allowed to access the backend
let port = 1234; // desired port
let host = 0.0.0.0 // desired host; 0.0.0.0 to host on your ip
app.get((req, res) =>
res.header('Content-Type', 'text/html');
if(req.hostname == allowedHost)
res.send('<html><body><h1>Hello World</h1></body></html>');
else
res.send('Connection not allowed');
);
app.listen(host, port, ()=>
console.log(`The server is running on http://$host:$port`);
【讨论】:
啊,这就是它的完成方式确实有意义,但我有几个后续问题 1. 对于客户端连接,我是否只需执行服务器主机外部 IP 地址,然后是其端口数字作为网址? 2. 允许对特定端口的请求是什么意思,这是在节点代码中完成的事情还是通过其他方式完成的? @AskedSuperior 1. 是的,您只需将请求从客户端发送到服务器,服务器 url 将是服务器的 IP 地址和指定的端口,如http://IPAddress:Port
。 2.“允许对特定端口的请求”我的意思是您应该为外部请求打开端口,因为在大多数情况下,该端口不对外部请求开放,这不是在 node.js 代码中完成的,这是一回事要在防火墙上完成,如果您使用 linux 机器托管服务器,您可以通过键入 ufw allow Port
打开外部请求端口
跟进评论:这个digitalocean guide解释了如何打开一个端口以上是关于如何从任何 ip 连接到 node.js 服务器的主要内容,如果未能解决你的问题,请参考以下文章