node.js本身还是nginx前端,用于提供静态文件?

node.js本身还是nginx前端,用于提供静态文件?,node.js,nginx,Node.js,Nginx,是否有更快的基准测试或比较:将nginx放在节点前面,让它直接服务于静态文件,或者只使用节点,使用它服务于静态文件 nginx解决方案对我来说似乎更易于管理,有什么想法吗?这是一个很难回答的问题。如果您编写了一个真正轻量级的节点服务器来提供静态文件,那么它的性能很可能会比nginx好,但它并没有那么简单。(比较nodejs文件服务器和lighttpd——在提供静态文件时,其性能与KingX类似) 提供静态文件的性能通常不仅仅取决于web服务器的工作。如果您希望获得尽可能高的性能,您将使用CDN为

是否有更快的基准测试或比较:将nginx放在节点前面,让它直接服务于静态文件,或者只使用节点,使用它服务于静态文件


nginx解决方案对我来说似乎更易于管理,有什么想法吗?

这是一个很难回答的问题。如果您编写了一个真正轻量级的节点服务器来提供静态文件,那么它的性能很可能会比nginx好,但它并没有那么简单。(比较nodejs文件服务器和lighttpd——在提供静态文件时,其性能与KingX类似)

提供静态文件的性能通常不仅仅取决于web服务器的工作。如果您希望获得尽可能高的性能,您将使用CDN为您的文件提供服务,以减少最终用户的延迟,并从边缘缓存中获益


若您不担心这一点,那个么node在大多数情况下都可以提供静态文件。节点适合异步代码,它也依赖异步代码,因为它是单线程的,任何阻塞i/o都会阻塞整个进程,并降低应用程序的性能。很可能您正在以非阻塞方式编写代码,但如果您同步执行任何操作,则可能会导致阻塞,这将降低其他客户端获得静态文件的速度。简单的解决方案是不编写阻塞代码,但有时这是不可能的,或者您不能总是强制执行它

我不同意这里的答案。虽然Node可以很好地工作,但如果配置正确,nginx肯定会更快。nginx在C中按照类似的模式(仅在需要时返回连接)高效地实现,占用的内存很小。此外,它支持系统调用来服务这些文件,这是您在服务文件时所能达到的最快速度,因为这是操作系统内核本身在做的工作

到目前为止,nginx已经成为作为前端服务器的事实标准。您可以利用它在服务静态文件、gzip、SSL甚至稍后的负载平衡方面的性能


注意:这假设文件实际上是“静态的”,就像请求时磁盘上的静态文件一样。

我做了一个快速的
ab-n 10000-c 100
来提供静态1406字节的
favicon.ico
,比较nginx、Express.js(静态中间件)和clustered Express.js。希望这有助于:

不幸的是,我无法测试1000个甚至10000个并发请求,因为我的机器上的nginx将开始抛出错误

编辑:根据artvolk的建议,下面是集群+
静态
中间件(较慢)的结果:


无论哪种方式,我都会将Nginx设置为缓存静态文件…您将看到巨大的差异。然后,无论您是否从node为它们提供服务,您的node应用程序基本上都获得了相同的性能和相同的负载释放

在大多数情况下,我个人不喜欢我的Nginx前端服务静态资产的想法

1) 项目现在必须在同一台机器上,或者必须拆分为资产(在nginx机器上)和web应用程序(在多台机器上进行扩展)


2) Nginx config现在必须维护静态资产的路径位置/在它们发生变化时重新加载。

我确信纯node.js在很多方面都优于Nginx

所有人都说我必须保持NginX有一个内置的缓存,而node.js没有出厂安装(你必须构建自己的文件缓存)。 自定义文件缓存的性能确实优于nginx和市场上的任何其他服务器,因为它超级简单

此外,Nginx在多核上运行。要充分发挥节点的潜力,必须对节点服务器进行集群。如果你有兴趣知道如何,那么请下午


你需要深入挖掘才能实现节点的性能涅盘,这是唯一的问题。一旦做了地狱是的。。。它胜过Nginx。

我对@gremo的图表有不同的解释。在我看来,node和nginx在相同数量的请求(9-10k之间)下扩展。当然,nginx的响应延迟会降低20毫秒,但我认为用户不一定会察觉到这种差异(如果你的应用程序构建得很好的话)。 给定固定数量的机器,在我将节点机器转换为nginx之前,将需要相当大的负载,因为节点是大部分负载首先发生的地方。
与此相反的是,如果您已经将一台机器专用于nginx进行负载平衡。如果是这样的话,那么您也可以让它为您的静态内容服务。

我想说,这还取决于您必须编写多少配置和代码才能使用一台服务器而不是另一台服务器。如果你不希望上市,并且你的应用服务器已经配置好,并且做了你需要的一切,那么你可以坚持使用它,直到它不够。只是一个小提示:node.js也支持
sendfile
-但似乎你必须编写一些代码,例如,在提供静态内容之外,为什么Nginx的性能比只在面向公众的域上公开主web服务器(Tomcat/Jetty/IIS等)要好?如果向你的应用程序发出请求,那么首先通过Nginx路由请求不会神奇地更快(当Nginx处理静态CSS和js、gzip和SSL时,在最好的情况下会明显更快)。然而,nginx也是最好的软件负载平衡器之一,因此这可能是至关重要的,因为大多数服务器都以中等高负载而臭名昭著。但是您可以使用Node.js以异步方式为文件提供服务器。你能用NGINX做到这一点吗?@lwansbrough将这些基准放在桌面上。在这个主题中,至少有一个人做过自己的实验。谢谢,非常有用!您是将此中间件用于favicon:还是仅将其用作静态文件?@artvolk the favicon one:)您是否为其设置了NODE_ENV=production