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

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

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

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

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

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

第二次编辑:感谢EhevuTov和David Ellis的回答,这两者都大有帮助。我仍在为我的应用程序确定总体结构,并且看起来这个StackOverflow问题

第三次编辑:自发布此问题以来,我已经走了一条路(尽管我还有很长的路要走)。检出我的GitHub存储库中的该文件,该文件利用了我从这个问题的答案中学到了!

有帮助吗?

解决方案

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

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

其他提示

如果您不需要使用WebSockets(或任何HTTP 1.1功能),请您可以改为使用NginX作为代理

优点是NginX可以处理的总负载相对于Node更高(基本上是静态编译并专门用于这种事情),但是您失去了流式传输任何数据的能力(一次发送较小的块)。/ p>

对于较小的站点,或者如果您不确定将来需要什么功能,则最好坚持使用node-http-proxy,并且仅当可以证明代理是服务器上的瓶颈时才切换到NginX。幸运的是,如果以后需要它,NginX并不难设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top