一尘不染

仅使用Node.js与将Node.js与Apache / Nginx结合使用

node.js

在哪种情况下,应该只在实际部署中将Node.js用作服务器?

当一个人 希望只使用Node.js的,有什么用Node.js的发挥更好?Apache还是Nginx?


阅读 381

收藏
2020-07-07

共1个答案

一尘不染

将另一个Web服务器放在Node.js前面有几个充分的理由:

  • 不必担心Node.js进程的特权/ setuid。通常只有root可以绑定到端口80。如果让nginx / Apache担心以root身份启动,绑定到端口80,然后放弃其root特权,则意味着您的Node应用程序不必担心。
  • 提供图片,css,js和html等静态文件。与使用适当的静态文件Web服务器相比,Node的效率可能较低(Node在某些情况下也可能更快,但这不太可能成为常态)。除了可以更高效地提供文件之外,您不必担心像在Node之外提供服务时那样处理eTag或缓存控件标头。某些框架可以为您解决此问题,但是您需要确定。无论如何,仍然可能会更慢。
  • 正如Matt Sergeant在回答中提到的那样,如果您的节点服务崩溃,您可以更轻松地显示有意义的错误页面或退回到静态站点。否则,用户可能只会获得超时连接。
  • 在Node前面运行另一个Web服务器可能有助于减轻安全漏洞和针对Node的DoS攻击。对于一个实际示例,通过在Node前面运行Nginx之类的内容防止CVE-2013-4450

我要说明第二点,说您可能应该通过CDN或从类似Varnish的缓存服务器后面提供静态文件。如果执行此操作,则源是Node还是Nginx或Apache都没有关系。

请特别注意nginx:如果您使用的是websocket,请确保使用最新版本的nginx(> =
1.3.13),因为它仅添加了对升级升级以使用websocket的支持。

2020-07-07