在我的机器上托管节点应用程序
Hosting Node app on my machine
所以我有一个节点应用程序,我可以通过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与域进行映射。希望对您有所帮助。
- 获取docker容器中运行的节点应用程序的IP地址
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 节点应用程序无法识别功能
- 超级简单的节点应用程序,ä的问题ö等等字符
- 是否有离线词库?它应该可以通过节点应用程序进行搜索
- 如何使用 Restify 在同一端口上运行多节点应用程序
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- 如何在节点应用程序中获取选定的下拉值
- 将节点应用程序中的表单数据重定向到 PHP 文件
- 如何在流打开时保持节点应用程序运行
- 无法在节点应用程序上获取/文件名错误
- Socket.io 两个节点应用程序
- 意外的输入结束 - 快速/节点应用程序上的 curl JSON
- 多变量是节点应用程序.js
- 将代理服务器(如 node-http-proxy )用于一个端口上具有单个应用程序的节点应用程序有什么意义
- 节点应用程序.js如何使用其推荐的功能
- 节点应用程序自动重新加载,自动编译咖啡脚本和自动编译更少的css
- 在我的机器上托管节点应用程序
- 使用 node.js 启动另一个节点应用程序
- 在浏览器或节点应用程序中的 JavaScript 中反序列化 UTF8 编码的 Byte[].js