【问题标题】:How to serve different node.js applications using the same port?如何使用相同的端口为不同的 node.js 应用程序提供服务?
【发布时间】:2013-04-22 14:19:43
【问题描述】:

我有一个网站来托管我的开发项目。每个项目都是一个node.js 文件。问题是我只能同时在线拥有 1 个项目 - 除非我将它们托管在不同的端口。但假设我想发布 2 个这样的项目:my_site.com/foomy_site.com/bar,其中第一个由“foo.js”管理,第二个由“bar.js”管理。我该怎么做?

【问题讨论】:

标签: node.js


【解决方案1】:

你需要一个代理在前面。您为每个单独的节点进程分配一个不同的端口。代理将端口 80 上的流量转发到相应的后端节点进程。

这可以通过 node-http-proxy (https://github.com/nodejitsu/node-http-proxy) 或任何 Web 服务器来完成。 Nginx 和 lighttpd 让它变得非常简单,Apache 不那么简单,但仍然完全可行。

【讨论】:

  • 这几乎是完美的,但是我必须在不同的端口上创建进程。这有点令人困惑,因为如果我想单独运行“foo.js”(比如说,我只是把它卖给了某人),我将无法只运行“node foo.js”。
  • 这不是一个近乎完美的问题,它是唯一的方法。您不能在同一个端口上运行多个进程。它是一个低级系统的东西。
  • 除了答案。如果您想稍后将其分开,您仍然可以自己运行 foo 并使端口可配置(如果现在不是)。
【解决方案2】:

设置 Nginx 进程以反向代理到您的 Node 进程。 Nginx 进程将保留端口并将my_site.com/foo 的请求发送到node foo.js 后端进程,并将my_site.com/bar 的请求发送到node bar.js 后端进程。

这样,您的 Node 进程将保持完全独立,并且如果其中一个变得流行,以后可以轻松地将它们分离到不同的服务器。

【讨论】:

    【解决方案3】:

    如果你使用 express/connect,你可以使用类似

    var bar = require("./bar"),
    foo = require("./foo");
    app.use(express.vhost("my_site.com/bar", bar));
    app.use(express.vhost("my_site.com/foo", foo));
    

    是一个单独的文件。

    注意:未经测试

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多