在我的机器上托管节点应用程序

Hosting Node app on my machine

本文关键字:节点 应用程序 我的 机器      更新时间:2023-09-26

所以我有一个节点应用程序,我可以通过localhost:someportnumber访问它。我如何公开这个应用程序(即向 interwebz 的其余部分,而不仅仅是我的本地网络)仅使用我的机器,而不是某种托管服务。机器是Macbook Pro,不确定它是否重要。

注意 - 这纯粹是为了理解,我不希望在我的笔记本电脑上永久托管玩具网络应用程序。

这是我的困惑 - 我的节点.js应用程序是一个网络服务器,为什么我需要另一台服务器(即 heroku、aws 等提供的服务器)来托管我的应用程序?我觉得我错过了什么...

假设这是一个家庭网络,那么您可能有某种路由器/防火墙将您的家庭网络连接到互联网。 默认情况下,路由器会阻止与网络的所有传入连接(出于安全原因)。

如果需要,您可以设置所谓的端口转发规则,告诉路由器您希望端口 80(这是浏览器的默认 http 端口)上的任何传入连接直接路由到家庭网络上的 Macbook Pro。 通常,您可以通过发现Macbook Pro在家庭网络上时的IP地址来做到这一点,并且您将设置该IP地址的端口转发规则。 端口转发规则通常通过某种基于 Web 的管理用户界面进行配置,您可以从 Web 浏览器使用该用户界面。 您必须查看特定路由器的手册,以了解如何最好地连接到它并进行配置。

除非您将 Macbook Pro 设置为具有静态 IP 地址,否则其 IP 地址将由路由器动态分配。 它可能会在一段时间内保持不变,但可能会随着时间的推移而改变。

完成此操作后,您需要发现家庭网络连接的 IP 地址。 这也可能是动态分配的,但也应该在一段时间内保持不变。 如果您知道此IP地址,那么互联网上的浏览器可以通过URL http://xxx.yyy.zzz连接到您的Web服务器,其中xxx.yyy.zzz是从互联网上看到的家庭网络的IP地址。

如果您希望能够使用普通域名(例如 http://mysampledomain.com)连接到它,那么您可以支付一些动态 DNS 服务,这些服务将为您的动态 IP 地址设置一个域,尽管不建议长期使用。 除了可能违反ISP的规则外,它不是一个特别可扩展或强大的解决方案。 从长远来看,迁移到托管服务提供商将更有意义。

这是我的困惑 - 我的节点.js应用程序是网络服务器,为什么我 需要另一台服务器(即由 Heroku、AWS 等提供的服务器)来托管我的 .app?我觉得我错过了什么...

您不需要其他 Web 服务器。 如果您要找到托管服务提供商,您将使用擅长托管节点.js服务器的托管服务提供商。 使用这些类型的提供程序,可能不会有另一个 Web 服务器 - 您的节点.js服务器将是唯一涉及的服务器。 他们可能有用于使多租户环境正常工作的代理或负载均衡器,但除了确保遵循正确的安装说明以使节点.js服务器在其环境中正常运行之外,您在很大程度上应该不知道这些。

您不需要服务器来托管应用程序 - 您需要通过互联网访问服务器。有很多方法可以做到这一点。

为了让我访问您的网络服务器应用程序,我需要知道您计算机的 IP 地址。假设你可以给我你的公共IP地址(在什么是我的IP中找到这个,把地址给我,让我连接到哪个端口。

例如。堆栈溢出的IP地址是104.16.34.249,但无论如何,您可能只有IPv6地址。现在,请记住,大多数家庭ISP每天都会重置您的公共IP地址。

接下来,你给我你的应用程序端口,例如8080。

所以我会尝试获得 https://104.16.34.249:8080/(或 http://104.16.34.249:8080/,具体取决于您的应用程序)。

但在大多数情况下,我会什么都不打,要么打你的路由器。这就是第 2 步:告诉您的路由器将此端口上的流量传递到您的计算机。您可以有一个简单的端口转发配置,或者例如。将计算机置于 DMZ 中。(如何做到这一切是另一个问题,可能在ServerFault或SuperUser上)。

所以,现在我可以从互联网访问您的应用程序。

但是您可能希望我使用一些常量名称,而不是不断变化的 IP 地址。因此,您注册了DynDNS或No-IP之类的服务,并在您的计算机或路由器上安装了他们的小片段,然后它们会为您提供诸如家庭主机名之类的东西。http://best-home-webserver-that-will-never-run-out-of-electricity.dyndns.com/或 http://my-cool-app.no-ip.com/。

谈谈加强你的游戏,嗯?

但是,如果您想要一个"真实"的域名,您自己的域名,例如"http://i-have-webz.com:8080/"怎么办?好吧,你的下一步是从像Namecheap这样的人那里购买这个域名,然后将你的DNS设置为指向你的IP地址(如果它是静态的 - 也就是说,如果它不会一直改变),或者作为你的no-ip/dyndns(动态)主机名的别名

下一个好步骤是获得合适的UPS,也是柴油发电机,当您电量耗尽时,从不同环路上的不同提供商租用另一条DSL线路(因此您有例如一根电缆和一条光纤线)进行备份,或者为此目的从邻居那里借用无线接入, 实施循环DNS的东西,从中发展出庞大的业务,然后将其全部转移到亚马逊。

上面介绍的是处理方案的一种方式的高级步骤。这不是一个非常完整的方法,在可能的坑法中并不详尽。还有更多,可能是更好的方法来执行许多或所有步骤。

您可以使用nginx并将nginx代理上的配置添加到节点JS中这是使用 nginx 配置的示例

server {
 listen 80;
server_name example.com;
location / {
    proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
 }
}

这种方式不建议永久使用,但对于演示,测试您可以在路由器中打开端口,另一个(从公共互联网)可以访问它。如果您需要域,请使用一些免费的动态DNS,例如no-ip与域进行映射。希望对您有所帮助。