【问题标题】:Hosting Node app on my machine在我的机器上托管 Node 应用程序
【发布时间】:2016-05-05 11:54:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js deployment


    【解决方案1】:

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

    如果需要,您可以设置所谓的端口转发规则,告诉路由器您希望端口 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 的规则外,它不是一个特别可扩展或强大的解决方案。从长远来看,转向托管服务提供商会更有意义。

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

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

    【讨论】:

    • 我怀疑端口转发是这里的答案。在发布之前,我应该多考虑一下。尽管如此,我非常感谢详细的答案。
    【解决方案2】:

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

    为了让我访问您的 webserver 应用程序,我需要知道您计算机的 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/,具体取决于您的应用)。

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

    所以,现在我可以从 interwebz 访问您的应用了。

    但您可能希望我使用一些不变的名称,而不是不断变化的 IP 地址。因此,您注册了 DynDNS 或 No-IP 之类的服务,并在您的计算机或路由器上安装了它们的小 sn-p,它们会为您提供类似于家庭主机名的东西,例如。 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 的东西,从中发展出庞大的业务,然后将其全部转移到亚马逊。

    上面描述的只是处理场景的一种方法的高级步骤。这不是一个非常完整的方法,也不是详尽无遗的可能的陷阱。还有更多可能更好的方法来执行许多或所有步骤。

    【讨论】:

      【解决方案3】:

      您可以使用 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;
       }
      }
      

      【讨论】:

      • 很确定这不是一个解决方案。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        • 1970-01-01
        • 2016-04-14
        • 1970-01-01
        相关资源
        最近更新 更多