仅使用Node.js与使用Apache / Nginx的Node.js

在什么情况下,应该只使用Node.js作为实际部署中的服务器?

当一个人不想只使用Node.js时,Node.js会发挥什么更好? Apache还是Nginx?

在Node.js前面添加另一个web服务器有几个很好的理由:

  • 不必担心Node.js进程的特权/ setuid。 通常只有root可以绑定到80端口。 如果让nginx / Apache担心以root身份启动,绑定到80端口,然后放弃其root权限,这意味着您的Node应用程序不必担心它。
  • 提供静态文件,如图像,CSS,JS和HTML。 与使用合适的静态文件Web服务器相比,节点可能效率较低(在选定的情况下,节点也可能更快,但这不太可能是常态)。 除了文件服务更有效率之外,您不必担心如何处理电子标签或caching控制标题的方式,如果您是从节点提供的东西。 有些框架可能会为你处理这个问题,但是你想确定一下。 无论如何,仍然可能会更慢。
  • 正如Matt Sergeant在他的回答中提到的,如果节点服务崩溃,则可以更轻松地显示有意义的错误页面,或者返回到静态站点。 否则用户可能只是得到一个超时的连接。
  • 在Node前运行另一个Web服务器可能有助于减轻对Node的安全漏洞和DoS攻击。 对于一个真实世界的例子, CVE-2013-4450是通过在Node之前运行类似Nginx的东西来阻止的 。

我会告诉你,第二个要点可能是你应该通过CDN服务你的静态文件,或者从像Varnish这样的caching服务器之后。 如果你这样做,那么源是Node还是Nginx还是Apache并不重要。

特别注意nginx:如果你使用的是websocket,请确保使用最新版本的nginx(> = 1.3.13),因为它只是增加了对使用websockets的连接进行升级的支持。

为了给pauljz的答案增加一个理由,我使用了一个前端服务器,这样当我重新启动后端服务器时,它可以提供502个错误页面,或者由于某种原因崩溃。 这使您的用户永远不会得到关于无法build立连接的错误。

我相信只要你知道你在做什么,在任何情况下使用Node来提供静态文件都是可以的 。 由于许多(每个?)竞争技术(PHP,Ruby,Python等)需要Web服务器(如HTTPD或Nginx)在应用程序服务器之前使用应用程序服务器来提供静态文件,这当然是一个新的范例。 。

我曾经读过的一些客观的理由是,使用Node最好的方法来使用静态文件,或者使用被认为是更好的testing/更稳定的方法。 实际上这些都是非常有效的原因,但纯粹的技术关联性不大。

除非你发现一个经典的Web服务器可能无法使用Node的function(我怀疑你会这么做),select你最了解的或者你喜欢使用的方法,因为任何一种方法都可以。

至于Nginx vs Apache – 他们会和Node“玩”一样。 您应该比较它们而不考虑节点。

我相信事实和基准根据pauljz nginx是更好的服务静态文件,我担心它肯定不是事实完全相反,他说什么请检查链接bechmarks。如何节点js比nginx缩放2倍( 4,250 trans / s vs 2,118 trans / s) – 尤其是在并发级别更高的情况下。 同时查看平均响应时间(0.14s vs 0.23s),最长交易时间(1.10s vs 13.95s)以及交易可用性数量,都在node.js中有利。 欲了解更多信息,请点击链接http://centminmod.com/siegebenchmarks/2013/020313/