【问题标题】:How to connect to node.js server from any ip如何从任何 ip 连接到 node.js 服务器
【发布时间】: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 的防火墙设置?

标签: node.js server ip backend


【解决方案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解释了如何打开一个端口
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2011-06-11
    • 2016-12-13
    • 2018-10-08
    • 2014-06-28
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多