37

关于部署 Node.js 应用程序,我已经看到很多教程显示它与 Nginx 并排部署,或多或少有一些漂亮的技巧可以让两者一起工作(还有烦人的东西,比如 Nginx 不支持 WebSockets) . 这对我来说似乎有点复杂......

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

我在 Django 中编写了很多应用程序,文档说你不应该使用 Django 来提供静态文件,因为它没有针对这个等等进行优化......所以我想也许这就是原因。

4

3 回答 3

28

Apache 和 NGINX 都是完全开发的 Web 服务器,提供许多开箱即用的模块和服务。它们被认为是强大的,并且已经证明了几年的稳定性。

有了这种可用的解决方案,就没有必要重新发明轮子了。使用 NGINX 实现负载均衡器和路由而不将 NodeJS 暴露在外部并仅在 localhost 上运行它会更有益。

NodeJS 不能被视为服务器软件,而仅仅是 JavaScript 引擎加上库/模块。它大量用于服务器脚本这一事实并不能使它成为 Web 服务器。

如果您决定忽略上述内容并完全切换到 NodeJS,我建议您考虑维护这样的解决方案。日志记录、启动/关闭脚本和监控会使任务比看起来更复杂。

此外,许多为 NodeJS 编写的库往往会因交付的新版本而中断,因为 NodeJS 引入了重大更改。将其视为缺乏成熟的代价。如果您愿意承担风险并且不怕问题,请选择 NodeJS。

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

更新:如果您决定使用 Node.js,请考虑使用 Express.js 框架。

于 2012-08-21T08:28:28.393 回答
26

好吧,有些人不介意使用 Node 代替 nginx。dotCloudNodejistu等某些云使用完全用 Node.js 编写的网关。主要是为了能够处理 websockets。但也因为 Node.js 非常快。

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

于 2012-08-21T08:18:07.203 回答
4

我更喜欢只使用 node.js 来完成整个事情。这样做的原因是,许多节点应用程序都有内置的文件服务器或依赖于为其文件提供服务的服务器。因此,每个应用程序都可以使用最适合的文件服务器,并可以根据需要对其进行自定义。

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

于 2012-08-21T08:34:22.900 回答