在我的电脑上托管Node应用程序

8
我有一个可以通过localhost:someportnumber访问的node应用程序。 如何使用我的计算机将此应用程序公开(即对于互联网的其余部分,而不仅仅是我的本地网络),而不是某种托管服务。 该机器是macbook pro,不确定它是否重要。
注意-这仅用于理解,我不打算永久托管玩具webapp在我的笔记本电脑上。
这是我的困惑-我的node.js应用程序是一个Web服务器,为什么我需要另一个服务器(即由heroku、aws等提供的服务器)来托管我的应用程序? 我感觉我错过了什么...
4个回答

14
need to set up port forwarding?

假设你在家里使用的是一个家庭网络,那么你很可能有某种路由器/防火墙将你的家庭网络连接到互联网。默认情况下,该路由器会阻止所有对网络的传入连接(出于安全考虑)。

如果你想要的话,可以设置所谓的端口转发规则,告诉路由器你希望将任何到达 80 端口(这是浏览器默认的 HTTP 端口)的传入连接直接路由到你家庭网络中的 MacBook Pro 上。通常,你需要发现在家庭网络上 MacBook Pro 的 IP 地址,并将端口转发规则设置为该 IP 地址。端口转发规则通常通过一些基于 web 的管理用户界面进行配置,你可以从 web 浏览器中使用此界面。你需要查看你特定路由器的手册以了解如何最好地连接并配置它。

除非你将 MacBook Pro 设置为具有静态 IP 地址,否则路由器会动态分配其 IP 地址。它可能会保持不变一段时间,但随着时间的推移也可能会发生变化。

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

如果你想要使用常规域名(例如http://mysampledomain.com)连接到它,则有一些付费的动态 DNS 服务可以将域名设置为你的动态 IP 地址,尽管这不建议用于任何长期使用。除了可能违反你的 ISP 规定外,这不是一个特别可扩展或健壮的解决方案。对于长期使用来说,更好的选择是转向托管提供者。

  

这是我的困惑 - 我的 node.js 应用程序就是一个 web 服务器,为什么我需要设置端口转发呢?

我需要另一个服务器(例如由heroku、aws等提供)来托管我的应用程序吗?感觉需要什么东西......

你不需要另一个Web服务器。如果你要找一个托管提供商,你应该选择擅长托管Node.js服务器的提供商。在这些类型的提供商中,可能没有其他Web服务器——你的Node.js服务器将是唯一涉及的服务器。他们可能会使用代理或负载均衡器来使多租户环境运行,但你应该基本上不会意识到除了确保你遵循正确的安装说明,在他们的环境中正确地启动你的Node.js服务器之外。


1
我怀疑端口转发是这里的答案。在发布之前,我应该再仔细考虑一下。尽管如此,我非常感谢详细的回答。 - logic_

5
你不需要服务器来托管应用程序,而是需要服务器能够通过互联网访问。有很多方法可以做到这一点。
为了访问你的web服务器应用程序,我需要知道你计算机的IP地址。假设你可以给我你的公共IP地址(在What Is My Ip上找到),并告诉我要连接哪个端口。
例如,stackoverflow的IP地址是104.16.34.249,但你可能只有IPv6地址。现在,请记住,大多数家庭ISP每天都会重置你的公共IP地址。
接下来,你给我你的应用程序端口,例如8080。
所以我会尝试获取https://104.16.34.249:8080/(或http://104.16.34.249:8080/,具体取决于你的应用程序)。
但在大多数情况下,我会连接不上或者连接到你的路由器。所以这是第二步:告诉你的路由器将此端口的流量传递到你的电脑上。你可以有一个简单的端口转发配置,或者将计算机放入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等内容,将其发展成庞大的业务,然后将所有内容转移到Amazon上。

上述是处理您情况的一种高级步骤,这并不是非常完整的方式,也没有详尽地列举所有可能存在的问题。可能还有更多、更好的方法来完成许多或所有步骤。


0
你可以使用nginx,并在nginx代理中添加配置到你的node 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;
 }
}

很确定仅此还不是一个解决方案。 - logic_

0

这种方法不建议长期使用,但是对于演示、测试,您可以在路由器中打开端口,另一个人(来自公共互联网)可以访问它。如果需要域名,请使用一些免费的动态DNS服务,如no-ip进行映射。 希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接