小编典典

仅使用 Node.js 与将 Node.js 与 Apache/Nginx 一起使用

all

在什么情况下应该更喜欢在实际部署中仅将 Node.js 用作服务器?

不想 只使用 Node.js 时,Node.js 有什么更好的选择?阿帕奇还是 Nginx?


阅读 76

收藏
2022-05-22

共1个答案

小编典典

在 Node.js 前面放置另一个 Web 服务器有几个很好的理由:

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

我将警告第二个要点,您可能应该通过 CDN 或从像 Varnish 这样的缓存服务器后面提供静态文件。如果您正在这样做,那么来源是 Node、Nginx
还是 Apache 并不重要。

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

2022-05-22