Aar*_*ron 44 multiple-domains http-proxy vhosts node.js express
我正在使用一台服务器来托管多个Node.js网络应用程序,这些应用程序分布在多个域中.我目前的做法是为不同端口上的每个应用程序运行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/
...
Run Code Online (Sandbox Code Playgroud)
我将不得不分别用节点(或永远,我目前正在使用)运行每个app.js ,并且每个都必须在内部使用不同的端口,并且跨应用重定向指向端口目标应用.
那么,这是我目前的计划.有什么问题,我应该避免哪些陷阱?最重要的是,是否有针对此问题的既定解决方案 - 使用Node.js/Express在同一系统上托管多个Web应用程序的问题?
编辑:我计划最终使用WebSockets和HTTPS,我的设置可以支持的带宽量对我来说并不重要 - 这是一个开发服务器(至少现在).感谢David Ellis提出的WebSockets问题.
第二次编辑:感谢EhevuTov和David Ellis的回答,两者都有很大帮助.我仍在为我的应用程序确定一个整体结构,看起来这个问题通过StackOverflow问题得到了详细解决
第三次编辑:自从发布这个问题以来我已经找到了一些方法(尽管我还有很长的路要走).在我的GitHub存储库中查看这个文件,它利用了我从这个问题的答案中学到的东西!
Ehe*_*Tov 35
由于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)
Run Code Online (Sandbox Code Playgroud)
如果你到达一台Express服务器还不够,那么请考虑使用API中的Node.Cluster.如果这还不够,那么目前的做法是将一个asnyc反向代理(如Nginx)放在Express服务器前面,并将代理指向Express服务器.
小智 6
如果您不需要使用WebSockets(或任何HTTP 1.1功能),则可以使用NginX作为代理.
优点是NginX可以处理的总负载与Node相比更高(基本上静态编译并专门用于此类事情),但是您无法流式传输任何数据(一次发送较小的块).
对于较小的站点,或者如果您不确定将来需要哪些功能,最好坚持使用node-http-proxy,只有在您可以证明代理是您服务器上的瓶颈时才切换到NginX.幸运的是,如果你以后确实需要,NginX并不难设置.
| 归档时间: |
|
| 查看次数: |
21591 次 |
| 最近记录: |