关于部署Node.js应用程序,我看到很多教程显示它与Nginx并排部署,或多或少的漂亮技巧允许2一起工作(和烦人的东西,比如Nginx没有支持WebSockets)。这对我来说似乎有点复杂......
为什么每个人都这样设置? 当Node.js提供任何优势时,部署Nginx会不会? 你不能用Node.js提供静态文件吗?
我在Django中编写了很多应用程序,并且文档说你不应该使用Django来提供静态文件,因为它没有针对此进行优化等等......所以我想也许这就是原因
答案 0 :(得分:27)
Apache和NGINX都是完全开发的Web服务器,提供大量现成的模块和服务。它们被认为是坚固的,并且已经证明了几年的稳定性。
拥有这种可用的解决方案,没有必要重新发明轮子。使用NGINX实现负载均衡器和路由更有利,并且不会将NodeJS暴露给外部,只需在localhost上运行它。
NodeJS不能被视为服务器软件,而只是JavaScript引擎和库/模块。它大量用于服务器脚本的事实并不能使它成为Web服务器。
如果您决定忽略上述内容并完全切换到NodeJS,我会考虑保留这样的解决方案。记录,启动/关闭脚本和监视可以使任务比看起来更复杂。
此外,为NodeJS编写的众多库往往会破坏新版本,因为NodeJS引入了重大变化。考虑到作为缺乏成熟度的价格。如果你能承担风险并且不怕问题,请选择NodeJS。
最后注意事项:静态文件可以与NodeJS一起提供。您的脚本可能会读取并将其推出。
更新:如果您决定使用Node.js,请考虑使用Express.js框架。
答案 1 :(得分:25)
有些人不介意使用Node而不是nginx。 像dotCloud或Nodejistu这样的某些云使用完全用Node.js编写的网关。主要是为了能够处理websockets。但也因为Node.js很快。
这是dotCloud的网关,最近开源https://github.com/dotcloud/hipache
答案 2 :(得分:4)
我更喜欢只使用node.js。原因是,许多节点应用程序具有内置文件服务器或依赖于提供其文件的服务器。因此,每个应用程序都可以使用最适合的文件服务器,并可以根据需要对其进行自定义。
此外,当您必须将每个请求从Apache / NGINX代理到node.js时,您会失去一些性能。让节点自己处理请求要简单得多。