我应如何在同一系统上组织多台Express服务器?
我正在使用一台服务器托管多个Node.js Web应用程序,这些Web应用程序分布在多个域中。我目前的做法是在不同端口上为每个应用程序运行Express服务器,并运行基本服务器,该服务器仅将请求路由(重定向)到正确的端口/ Express服务器。这可行,但是这意味着我的基本服务器正在路由每个HTTP请求(并通过手动重定向它),并且我的用户看到我的应用托管在[hostname]:8000。
[经过一番研究后,我发现可以使用http-proxy满足我的路由需求,但是我仍然想知道是否存在在同一系统上运行多个Express服务器的最佳实践。这是我打算做的事情:
每个网络应用都有自己的文件夹,具有完整的Express文件夹结构(app.js,路线,视图等)。应用将按域分组,因此示例文件夹结构为:
hostname/
app.js
routes/
views/
...
app1/
app1.js
routes/
views/
...
app2
...
hostname2/
app.js
routes/
views/
...
我必须分别用node(或我当前正在使用的forever)运行每个app.js,并且每个内部都必须使用不同的端口,并指向跨应用程序重定向目标应用程序的端口。
所以,这是我目前的计划。它有什么问题,我应该避免哪些陷阱?最重要的是,是否存在解决此问题的解决方案-使用Node.js / Express在同一系统上托管多个Web应用程序的问题?
编辑:我确实打算最终使用WebSockets和HTTPS,并且我的安装程序可以支持的带宽数量对我而言并不重要-这是一台开发服务器(至少现在是这样)。感谢David Ellis提出了WebSockets问题。
[第二编辑:感谢EhevuTov和David Ellis的回答,两者都提供了很大帮助。我仍在为我的应用程序确定总体结构,this StackOverflow question
似乎更详细地说明了这个问题。第三次编辑:自发布此问题以来,我已经走了一条路(尽管我还有很多路要走)。查看this file in my GitHub repository,它利用了我从该问题的答案中学到的知识!
回答如下:由于Express使用Connect,所以我很确定您可以使用Connect的虚拟主机中间件。它的操作类似于其他产品上的其他vhost模块。我没有多个域可以测试并向您显示正确的代码,但是我认为它是这样的:
express.createServer()
.use(express.vhost('hostname1', require('/path/to/hostname1').app)
.use(express.vhost('hostname2', require('/path/to/hostname2').app)
.listen(80)
如果到达一台Express服务器还不够的程度,请考虑使用API中的Node.Cluster。如果这还不够的话,那么当前的做法是在Express服务器前放置一个Nnyx之类的asnyc反向代理,并将代理指向Express服务器。