当前位置: 首页 > 面试题库 >

如何在同一系统上组织多个Express服务器?

吕越彬
2023-03-14
问题内容

我正在使用一台服务器托管多个Node.js
Web应用程序,这些应用程序分布在多个域中。我目前的做法是在不同端口上为每个应用程序运行Express服务器,并运行基本服务器,该服务器简单地将请求路由(重定向)到正确的端口/
Express服务器。这可行,但是这意味着我的基本服务器正在路由每个HTTP请求(并通过手动重定向它),并且我的用户看到我的应用托管在[hostname.com]:8000。

经过一番研究,我发现可以使用http-proxy来满足我的路由需求,但是我仍然想知道是否有在同一系统上运行多个Express服务器的最佳实践。这是我打算做的事情:

每个Web应用程序将拥有自己的文件夹,并具有完整的Express文件夹结构(app.js,路线,视图等)。应用程序将按域分组,因此示例文件夹结构为:

    hostname.com/
        app.js
        routes/
        views/
        ...
        app1/
            app1.js
            routes/
            views/
            ...
        app2
        ...
    hostname2.com/
        app.js
        routes/
        views/
        ...

我必须分别使用node(或我当前使用的forever)分别运行每个app.js
,并且每个内部都必须使用不同的端口,跨应用程序重定向指向的端口目标应用。

所以,那是我目前的计划。它有什么问题,我应该尝试避免哪些陷阱?最重要的是, 是否存在针对此问题的既定解决方案-使用Node.js /
Express在同一系统上托管多个Web应用程序的问题?

编辑:我确实打算最终使用WebSockets和HTTPS,并且我的安装程序可以支持的带宽量对我而言并不重要-
这是一台开发服务器(至少现在是这样)。感谢David Ellis提出了WebSockets问题。

编辑:自发布此问题以来,我已经采取了一些措施(尽管我还有很长的路要走)。在我的GitHub存储库中签出该文件,它利用了我从该问题的答案中学到的知识!


问题答案:

由于Express使用Connect,因此我非常确定您可以使用Connect的虚拟主机中间件。它的操作类似于其他产品上的其他vhost模块。我没有多个域可以测试并向您显示正确的代码,但是我认为这是这样的:

express.createServer()
.use(express.vhost('hostname1.com', require('/path/to/hostname1').app)
.use(express.vhost('hostname2.com', require('/path/to/hostname2').app)
.listen(80)

如果一台Express服务器还不够用,请考虑使用API​​中的Node.Cluster。如果这还不够,那么当前的做法是在Express服务器前放置一个Nnyx之类的asnyc反向代理,并将代理指向Express服务器。



 类似资料:
  • easySwoole实现了简单版的IOC,使用 IOC 容器可以很方便的存储/获取资源,实现解耦。 注意:在服务启动后,对IOC容器的获取/注入仅限当前进程有效。不对其他worker进程产生影响。 方法列表 getInstance $di = Di::getInstance(); set 函数原型:set($key, $obj,…$arg) key:键名 obj:要注入内容。支持注入对象名,对象实

  • 问题内容: 我有一个绑定了单个IP的Linux服务器。我想在此IP上的此服务器上托管多个Node.js站点,每个站点(显然)都具有唯一的域或子域。我希望它们都在端口80上。 我有什么选择呢? 一个明显的解决方案似乎是让所有域都由一个node.js Web应用程序提供服务,该Web应用程序充当代理并传递给在唯一端口上运行的其他node.js应用程序。 问题答案: 选择以下之一: 使用其他一些服务器(

  • 我在一个基于OpenStack的私有云上有一个Kubernetes集群。需要在特定端口上公开我的服务。我可以使用Nodeport来完成此操作。但是,如果我尝试创建与第一个类似的另一个服务,我将无法公开它,因为我必须使用相同的端口,并且它已经被第一个服务占用了。 我注意到我可以在公共云中使用LoadBalancer,但我假设这在OpenStack中是不可能的?我也尝试使用Kubernetes的Ing

  • 我最近设置了一个Laravel队列系统。最基本的是cronjob调用一个命令将作业添加到队列中,并调用第二个命令发送电子邮件。 当我通过ssh连接到服务器并运行php artisan queue:listen时,系统会工作,但如果我关闭终端,侦听器就会关闭,作业会堆积起来并在队列中等待,直到我通过ssh重新连接并再次运行listen。 保持队列系统在后台运行而不需要通过ssh保持连接打开的最佳方法

  • 问题内容: 当使用Socket类时,它正在某个端口上建立与服务器的TCP连接,但是ServerSocket能够在服务器上为每个接受请求处理多个客户端连接,并将其委托给线程来处理该请求。但是ServerSocket类如何在同一个端口上接受多个tcp连接。 这是否意味着要由操作系统来决定它允许多少个连接,或者允许的最大积压量是多少,并且可以由OS之上的应用程序控制(我的意思是Java受OS支持的最大积

  • 问题内容: 我正在寻找一种处理以下情况的方法: 我们有一个数据库服务器,上面有多个数据库(所有数据库都有相同的架构,不同的数据)。 我们正在寻找一种查询所有数据库的方法(并且它易于配置,因为可以随时添加更多数据库)。此数据访问必须是实时的。 举例来说,假设您有一个插入订单的应用程序- 每个应用程序都有自己的数据库等。我们正在寻找的是一种有效的方式,使单个应用程序可以访问所有其他数据库中的订单信息,