首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用Node.js与在Apache/Nginx中使用Node.js

只使用Node.js与在Apache/Nginx中使用Node.js
EN

Stack Overflow用户
提问于 2013-05-27 09:58:32
回答 6查看 105.7K关注 0票数 256

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

而不是只想使用Node.js时,Node.js有什么更好的发挥呢?阿帕奇还是尼克斯?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-27 10:05:24

有几个很好的理由可以将另一个are服务器放在Node.js前面:

  • 不必担心Node.js进程的权限/setuid。通常只有根可以绑定到端口80。如果您让nginx/Apache担心从root开始,绑定到端口80,然后放弃它的根权限,这意味着Node应用程序不必担心它。
  • 提供图像、css、js和html等静态文件。与使用适当的静态文件web服务器相比,节点的效率可能更低(Node在选择方案中也可能更快,但这不太可能是规范)。在更有效地服务文件的基础上,您将不必担心处理eTags或缓存控制头的方式,如果您在节点之外提供服务的话。有些框架可能会为您处理这个问题,但是您需要确定。不管怎么说,可能还是要慢一点。
  • 正如马特·中士在他的回答中提到的那样,如果节点服务崩溃,您可以更容易地显示有意义的错误页面,或者回到静态站点上。否则,用户可能只会得到一个超时连接。
  • 在Node前面运行另一个web服务器可能有助于减少针对Node的安全漏洞和DoS攻击。作为一个现实世界的例子,CVE-2013-4450通过在Node前面运行像Nginx这样的程序来阻止

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

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

票数 233
EN

Stack Overflow用户

发布于 2013-05-27 16:05:30

为了在pauljz的回答中再加上一个原因,我使用了一个前端服务器,这样当我重新启动后端服务器或它因某种原因崩溃时,它就可以提供502个错误页面。这使您的用户永远不会收到关于无法建立连接的错误。

票数 86
EN

Stack Overflow用户

发布于 2014-06-05 21:03:24

我相信,只要您知道自己在做什么,使用Node来服务静态文件在任何情况下都是好的,。使用应用服务器为这么多的静态文件提供服务无疑是一个新的范例(每一个?)相竞争的技术(PHP、Ruby、Python等)要求在应用服务器前面有一个像HTTPD或Nginx这样的web服务器。

我所读过的反对使用Node提供静态文件的每一个客观原因都围绕着使用您最了解的内容或使用被认为更好的测试/更稳定的内容的想法。实际上,这些都是非常有效的理由,但没有什么纯粹的技术意义。

除非您找到一个传统web服务器无法使用Node的功能(我怀疑您会这样做),否则请选择您最了解的内容或您希望使用的功能,因为这两种方法都是可以的。

至于Nginx和Apache --他们将和Node“玩”同样的游戏。你应该把它们和Node比较一下。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16770673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档