在我的机器上托管 Node 应用程序
Hosting Node app on my machine
所以我有一个可以通过 localhost:someportnumber 访问的节点应用程序。我如何仅使用我的机器而不是某种托管服务公开此应用程序(即对 interwebz 的其余部分,而不仅仅是我的本地网络)。机器是macbook pro,不确定是否重要。
注意 - 这纯粹是为了理解,我不希望在我的笔记本电脑上永久托管一个玩具网络应用程序。
这是我的困惑 - 我的 node.js 应用程序是一个网络服务器,为什么我需要另一台服务器(即由 heroku、aws 等提供的服务器)来托管我的应用程序?我觉得我错过了什么...
不建议永久使用这种方式,但为了演示,测试您可以在路由器中打开端口,另一个(来自 public 互联网)可以访问它。如果您需要域,请使用一些免费的动态 DNS,例如 no-ip 来映射域。
希望能帮到你。
假设这是一个家庭网络,那么您可能有某种 router/firewall 将您的家庭网络连接到互联网。默认情况下,路由器会阻止所有传入的网络连接(出于安全原因)。
如果需要,您可以设置所谓的端口转发规则,告诉路由器您希望将端口 80(这是浏览器的默认 http 端口)上的任何传入连接直接路由到家庭网络上的 macbook pro。通常,您可以通过发现您的 macbook pro 在您的家庭网络上时的 IP 地址是什么来做到这一点,并且您可以为该 IP 地址设置端口转发规则。端口转发规则通常会通过某种 web-based 管理用户界面进行配置,您可以从网络浏览器使用该界面。您必须查看特定路由器的手册,了解如何最好地连接和配置它。
除非您将 macbook pro 设置为具有静态 IP 地址,否则其 IP 地址将由路由器动态分配。它可能会在一段时间内保持不变,但会随着时间的推移而改变。
完成此操作后,您需要发现家庭网络连接的 IP 地址。这也可能是动态分配的,但也应该在一段时间内保持不变。如果您知道此 IP 地址,则互联网上的浏览器可以通过 URL http://xxx.yyy.zzz
连接到您的 Web 服务器,其中 xxx.yyy.zzz
是您家庭网络的 IP 地址,如从互联网。
如果您希望能够使用普通域名连接到它,例如 http://mysampledomain.com
,那么您可以付费购买一些动态 DNS 服务,为您的动态 IP 设置一个域地址,但不建议长期使用。除了可能违反您的 ISP 的规则之外,它不是一个特别可扩展或强大的解决方案。从长远来看,转向托管服务提供商会更有意义。
Here's my confusion - my node.js application IS A WEBSERVER, why do I
need another server (i.e. one provided by heroku, aws, etc) to host my
app? I feel like I'm missing something...
您不需要其他网络服务器。如果您要寻找托管服务提供商,您会使用擅长托管 node.js 服务器的托管服务提供商。使用这些类型的提供商,可能不会有另一个 Web 服务器 - 您的 node.js 服务器将是唯一涉及的服务器。他们可能使用代理或负载平衡器来使 multi-tenant 环境正常工作,但除了确保按照正确的安装说明启动 node.js 服务器之外,您应该基本上不了解这些运行 适合他们的环境。
你可以使用 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;
}
}
您不需要服务器来托管应用程序 - 您需要一个可通过互联网访问的服务器。有很多方法可以做到这一点。
为了让我访问您的 网络服务器 应用程序,我需要知道您计算机的 IP 地址。假设你可以给我你的 public IP 地址(在 What Is My Ip 找到这个,把地址给我,让我连接到哪个端口.
例如。 Whosebug 的 IP 地址是 104.16.34.249
,但无论如何您可能只有 IPv6 地址。现在,请记住,大多数家庭 ISP 都有每天重置您的 public IP 地址的习惯。
接下来,你给我你的应用程序端口,例如8080.
所以我会尝试获取 https://104.16.34.249:8080/ (or http://104.16.34.249:8080/,具体取决于您的应用程序)。
但在大多数情况下,我要么什么都不打,要么打你的路由器。所以这是第 2 步:告诉您的路由器将此端口上的流量传递到您的计算机。您可以有一个简单的端口转发配置,或者例如。将计算机放在 DMZ 中。 (如何完成所有这些是另一个问题,可能在 ServerFault 或 SuperUser 上)。
所以,现在我可以从 interwebz 访问您的应用程序了。
但您可能希望我使用一些常量名称,而不是不断变化的 IP 地址。因此,您注册 DynDNS 或 No-IP 之类的服务,并在您的计算机或路由器上安装他们的小片段,他们会为您提供类似于家庭主机名的信息,例如。 http://best-home-webserver-that-will-never-run-out-of-electricity.dyndns.com/ or http://my-cool-app.no-ip.com/。
谈谈如何提高游戏水平,是吧?
但是,如果您想要一个自己的 "real" 域名,例如“http://i-have-webz.com:8080/”,该怎么办?那么,您的下一步是从像 Namecheap 这样的人那里购买这个域,然后将您的 DNS 设置为指向您的 IP 地址(如果它是静态的 - 也就是说,如果它不一直更改),或者作为 别名 到您的no-ip/dyndns(动态)主机名。
下一个好的步骤是获得合适的 UPS,以及当您 运行 没电时使用的柴油发电机,从不同供应商处租用不同回路上的另一条 DSL 线路(这样您就有例如,一根电缆和一根光纤线)用于备份,或者可能为此目的从您的邻居那里借用无线访问,实施 round-robin dns 东西,从中发展出巨大的业务,然后将其全部转移到亚马逊。
上面描述的 high-level 个步骤只是处理您的场景的一种方法。这不是一个非常完整的方法,也不是详尽无遗的可能的陷阱。执行许多或所有步骤还有更多可能更好的方法。
所以我有一个可以通过 localhost:someportnumber 访问的节点应用程序。我如何仅使用我的机器而不是某种托管服务公开此应用程序(即对 interwebz 的其余部分,而不仅仅是我的本地网络)。机器是macbook pro,不确定是否重要。
注意 - 这纯粹是为了理解,我不希望在我的笔记本电脑上永久托管一个玩具网络应用程序。
这是我的困惑 - 我的 node.js 应用程序是一个网络服务器,为什么我需要另一台服务器(即由 heroku、aws 等提供的服务器)来托管我的应用程序?我觉得我错过了什么...
不建议永久使用这种方式,但为了演示,测试您可以在路由器中打开端口,另一个(来自 public 互联网)可以访问它。如果您需要域,请使用一些免费的动态 DNS,例如 no-ip 来映射域。 希望能帮到你。
假设这是一个家庭网络,那么您可能有某种 router/firewall 将您的家庭网络连接到互联网。默认情况下,路由器会阻止所有传入的网络连接(出于安全原因)。
如果需要,您可以设置所谓的端口转发规则,告诉路由器您希望将端口 80(这是浏览器的默认 http 端口)上的任何传入连接直接路由到家庭网络上的 macbook pro。通常,您可以通过发现您的 macbook pro 在您的家庭网络上时的 IP 地址是什么来做到这一点,并且您可以为该 IP 地址设置端口转发规则。端口转发规则通常会通过某种 web-based 管理用户界面进行配置,您可以从网络浏览器使用该界面。您必须查看特定路由器的手册,了解如何最好地连接和配置它。
除非您将 macbook pro 设置为具有静态 IP 地址,否则其 IP 地址将由路由器动态分配。它可能会在一段时间内保持不变,但会随着时间的推移而改变。
完成此操作后,您需要发现家庭网络连接的 IP 地址。这也可能是动态分配的,但也应该在一段时间内保持不变。如果您知道此 IP 地址,则互联网上的浏览器可以通过 URL http://xxx.yyy.zzz
连接到您的 Web 服务器,其中 xxx.yyy.zzz
是您家庭网络的 IP 地址,如从互联网。
如果您希望能够使用普通域名连接到它,例如 http://mysampledomain.com
,那么您可以付费购买一些动态 DNS 服务,为您的动态 IP 设置一个域地址,但不建议长期使用。除了可能违反您的 ISP 的规则之外,它不是一个特别可扩展或强大的解决方案。从长远来看,转向托管服务提供商会更有意义。
Here's my confusion - my node.js application IS A WEBSERVER, why do I need another server (i.e. one provided by heroku, aws, etc) to host my app? I feel like I'm missing something...
您不需要其他网络服务器。如果您要寻找托管服务提供商,您会使用擅长托管 node.js 服务器的托管服务提供商。使用这些类型的提供商,可能不会有另一个 Web 服务器 - 您的 node.js 服务器将是唯一涉及的服务器。他们可能使用代理或负载平衡器来使 multi-tenant 环境正常工作,但除了确保按照正确的安装说明启动 node.js 服务器之外,您应该基本上不了解这些运行 适合他们的环境。
你可以使用 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;
}
}
您不需要服务器来托管应用程序 - 您需要一个可通过互联网访问的服务器。有很多方法可以做到这一点。
为了让我访问您的 网络服务器 应用程序,我需要知道您计算机的 IP 地址。假设你可以给我你的 public IP 地址(在 What Is My Ip 找到这个,把地址给我,让我连接到哪个端口.
例如。 Whosebug 的 IP 地址是 104.16.34.249
,但无论如何您可能只有 IPv6 地址。现在,请记住,大多数家庭 ISP 都有每天重置您的 public IP 地址的习惯。
接下来,你给我你的应用程序端口,例如8080.
所以我会尝试获取 https://104.16.34.249:8080/ (or http://104.16.34.249:8080/,具体取决于您的应用程序)。
但在大多数情况下,我要么什么都不打,要么打你的路由器。所以这是第 2 步:告诉您的路由器将此端口上的流量传递到您的计算机。您可以有一个简单的端口转发配置,或者例如。将计算机放在 DMZ 中。 (如何完成所有这些是另一个问题,可能在 ServerFault 或 SuperUser 上)。
所以,现在我可以从 interwebz 访问您的应用程序了。
但您可能希望我使用一些常量名称,而不是不断变化的 IP 地址。因此,您注册 DynDNS 或 No-IP 之类的服务,并在您的计算机或路由器上安装他们的小片段,他们会为您提供类似于家庭主机名的信息,例如。 http://best-home-webserver-that-will-never-run-out-of-electricity.dyndns.com/ or http://my-cool-app.no-ip.com/。
谈谈如何提高游戏水平,是吧?
但是,如果您想要一个自己的 "real" 域名,例如“http://i-have-webz.com:8080/”,该怎么办?那么,您的下一步是从像 Namecheap 这样的人那里购买这个域,然后将您的 DNS 设置为指向您的 IP 地址(如果它是静态的 - 也就是说,如果它不一直更改),或者作为 别名 到您的no-ip/dyndns(动态)主机名。
下一个好的步骤是获得合适的 UPS,以及当您 运行 没电时使用的柴油发电机,从不同供应商处租用不同回路上的另一条 DSL 线路(这样您就有例如,一根电缆和一根光纤线)用于备份,或者可能为此目的从您的邻居那里借用无线访问,实施 round-robin dns 东西,从中发展出巨大的业务,然后将其全部转移到亚马逊。
上面描述的 high-level 个步骤只是处理您的场景的一种方法。这不是一个非常完整的方法,也不是详尽无遗的可能的陷阱。执行许多或所有步骤还有更多可能更好的方法。