Node.js能否完全替代Apache或NGINX这样的解决scheme?

关于部署一个Node.js应用程序,我看到很多教程展示了它与Nginx并行部署,或多或less的漂亮的技巧,让2一起工作(和烦人的东西,如Nginx不支持WebSockets) 。 这对我来说似乎有些复杂

为什么每个人都做这种设置? 在有Node.js的情况下部署Nginx会提供什么优势? 你不能用Node.js提供静态文件吗?

我已经在Django中写了很多应用程序,并且文档说你不应该使用Django来提供静态文件,因为它没有被优化,所以我想也许这是原因。

那么有些人不介意使用Node而不是nginx。 像dotCloud或Nodejistu的某些云使用完全写在Node.js中的网关。 主要是为了能够处理websocket。 但也因为Node.js是该死的快。

这是最近开源的dotCloud网关https://github.com/dotcloud/hipache

Apache和NGINX都是完全开发的Web服务器,提供大量的模块和服务。 他们被认为是强大的,已经certificate了几年来的稳定。

有了这种可用的解决scheme,没有必要重新发明轮子。 使用NGINX实现负载平衡器和路由可能会更有益,而不会将NodeJS暴露在外,只需在本地主机上运行即可。

NodeJS不能被认为是一个服务器软件,而只是一个JavaScript引擎加上库/模块。 大量用于服务器脚本的事实并不会使其成为Web服务器。

如果您决定忽略上述内容并完全切换到NodeJS,我build议您考虑维护此类解决scheme。 logging,启动/closures脚本和监视可以使任务比看起来更复杂。

此外,为NodeJS编写的大量库往往会随着新版本的发布而中断,因为NodeJS引入了重大更改。 考虑到成本不足的代价。 如果你冒着风险,不怕问题,去NodeJS。

最后一点:静态文件可以通过NodeJS提供。 您的脚本可能会读取它并将其推出。

更新:如果你决定去Node.js考虑使用Express.js框架。

我更喜欢只使用node.js。 原因是,许多节点应用程序都具有内置的文件服务器或依赖于服务于其文件的节点应用程序。 因此,每个应用程序都可以使用最适合的文件服务器,并可以根据需要进行自定义。

此外,如果必须将来自Apache / NGINX的每个请求都代理到node.js,则会损失一些性能。 让节点自己处理请求要简单得多。