3 回答
TA贡献1810条经验 获得超4个赞
将另一个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的支持。
TA贡献1818条经验 获得超11个赞
只是为了给pauljz的答案增加一个原因,我使用了前端服务器,这样当我重新启动后端服务器或由于某种原因崩溃时,它可以提供502个错误页面。这使您的用户永远不会收到有关无法建立连接的错误。
TA贡献1934条经验 获得超2个赞
我相信,只要您知道自己在做什么,就可以在所有情况下使用Node服务静态文件。使用应用服务器来服务于静态文件无疑是一种新的范例,因为许多(每一个?)竞争技术(PHP,Ruby,Python等)都需要在应用服务器之前使用HTTPD或Nginx之类的Web服务器。 。
我曾经阅读过的反对使用Node服务静态文件的客观原因都围绕着使用您最了解的知识或使用经过更好测试/更稳定的知识的想法。从实践上讲,这是非常有效的原因,但几乎没有技术上的相关性。
除非您发现经典Web服务器无法使用Node所具有的功能(我怀疑您会做到),否则请选择您最了解的知识或希望使用的方法,因为这两种方法都很好。
至于Nginx与Apache的关系,它们将与Node相同。您应该比较它们而不考虑Node。
- 3 回答
- 0 关注
- 642 浏览
添加回答
举报