如何从任何 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.hostnamereq.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 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 页面连接到 MongoDB?

如何将 plunker 连接到本地 Node.js 服务器?

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

如何从局域网外部连接到 Nodejs 服务器

在 Node.js 中连接到多个 MySQL 数据库

如何从 Node.js 连接到 nethack?