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

art*_*olk 84 nginx node.js

是否有更快的基准或比较:将nginx放在节点前面并让它直接提供静态文件或仅使用节点并使用它来提供静态文件?

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

m33*_*lky 114

我不得不在这里不同意答案.虽然Node会很好,但正确配置后nginx肯定会更快.nginx在C中有效实现,遵循类似的模式(仅在需要时返回连接),内存占用空间很小.此外,它支持sendfile系统调用来提供那些尽可能快地提供服务文件的文件,因为它是正在执行工作的操作系统内核本身.

到目前为止,nginx已成为事实上的标准作为前端服务器.您可以将其用于提供静态文件,gzip,SSL以及稍后进行负载平衡的性能.

PS:这假定文件确实是"静态的",就像在请求时磁盘上的静止一样.

  • 只是一个小注:node.js也支持`sendfile` - 但似乎你必须编写一些代码,参见例如.http://blog.std.in/2010/09/09/using-sendfile-with-nodejs/ (7认同)

gre*_*emo 72

我做了一个快速ab -n 10000 -c 100的服务静态1406字节favicon.ico,比较nginx,Express.js(静态中间件)和集群Express.js.希望这可以帮助:

在此输入图像描述

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

编辑:正如artvolk所建议的,这里是集群+ static中间件(更慢)的结果:

在此输入图像描述

  • 对于那些不会说意大利语的人来说,x轴是请求数,而Y轴是服务文件所用的ms数.我不得不谷歌翻译,因为我想确保我没有读错数据.这些数据虽然令人难以置信,但我非常感谢这里的基准测试.毕竟会坚持使用nginx (16认同)
  • 你为测试设置了NODE_ENV =生产吗?因为缓存"静态"中间件将在生产中发挥作用,这将产生令人难以置信的差异. (2认同)

小智 11

我对@ gremo的图表有不同的解释.它看起来像节点和nginx规模相同的请求数(9-10k之间).当然,nginx的响应延迟会持续20ms,但我不认为用户必然会发现这种差异(如果您的应用程序构建良好).给定一定数量的机器,在将节点机器转换为nginx之前需要相当大的负载,因为该节点是首先出现大部分负载的地方.与此相反的一个问题是,如果您已经将一台机器专用于nginx以实现负载平衡.如果是这种情况,那么您也可以使用它来提供静态内容.

  • 需要引用 (4认同)

Wil*_*ern 9

无论哪种方式,我都设置Nginx来缓存静态文件 ......你会看到那里有巨大的差异.然后,无论您是否从节点提供服务,您基本上都可以在节点应用程序上获得相同的性能和相同的负载.

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

1)项目现在必须在同一台机器上 - 或者必须分成资产(在nginx机器上)和web应用程序(在多台机器上进行缩放)

2)Nginx配置现在必须维护静态资产/重新加载时的路径位置.