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

11 浏览
0 Comments

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

已关闭。该问题需要更加具体。它目前不接受答案。


 

想要改善这个问题?通过编辑这篇文章,让问题专注于一个问题。

社区在7个月前审查了是否重新开放此问题,但它仍然关闭:

原关闭原因未得到解决


改善这个问题

在真正的部署中,什么情况下应该优先使用Node.js作为服务器?

当不想仅使用Node.js时,什么比Node.js更好?Apache还是Nginx?

admin 更改状态以发布 2023年5月23日
0
0 Comments

除了pauljz的回答之外,我还想再添加一个原因,就是我使用前端服务器,这样在重启后端服务器或因某些原因崩溃时,它可以提供502错误页面。这使得您的用户永远不会收到关于无法建立连接的错误。

0
0 Comments

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

  • 不需要担心Node.js进程的权限 / setuid问题。通常只有root可以绑定端口80。如果你让nginx / Apache负责启动作为root,绑定到端口80,然后放弃它的root权限,那么你的Node应用程序就不必担心这个问题了。
  • 提供静态文件,例如图片、CSS、JS和HTML。与使用正确的静态文件Web服务器相比,Node可能效率较低(在某些特定场景下,Node也可能更快,但这不太可能是常态)。除了更有效地服务文件外,您也不必担心处理eTag或缓存控制标头,如果您是从Node服务处理内容,则需要考虑这些问题。一些框架可能会为您处理此问题,但您需要确定。无论如何,仍然可能较慢。
  • 正如Matt Sergeant在他的回答中提到的那样,如果您的node服务崩溃,您可以更轻松地显示有意义的错误页面或回退到静态站点。否则,用户可能只会得到经过时间的连接。
  • 在Node之前运行另一个Web服务器可能有助于减轻针对Node的安全漏洞和DoS攻击。对于现实世界的例子,CVE-2013-4450类似Nginx这样的东西防止。

我会通过说第二个要点,即你应该通过CDN或从像Varnish这样的缓存服务器后面提供静态文件来限制。如果你这样做,那么Node、Nginx或Apache的情况并不重要。

特别是在使用WebSockets时,请小心nginx:请确保使用最新版本的nginx(> = 1.3.13),因为它只是添加了支持将连接升级到使用WebSockets。

0