【发布时间】:2013-05-22 03:54:00
【问题描述】:
在什么情况下,在实际部署中应该更愿意将 Node.js 仅用作服务器?
当一个人不只想使用 Node.js 时,Node.js 有什么更好的选择? Apache 还是 Nginx?
【问题讨论】:
标签: node.js
在什么情况下,在实际部署中应该更愿意将 Node.js 仅用作服务器?
当一个人不只想使用 Node.js 时,Node.js 有什么更好的选择? Apache 还是 Nginx?
【问题讨论】:
标签: node.js
在 Node.js 前面放置另一个网络服务器有几个很好的理由:
我将警告第二个要点,您可能应该通过 CDN 或从像 Varnish 这样的缓存服务器后面提供静态文件。如果您这样做,那么源是 Node、Nginx 还是 Apache 并不重要。
特别注意 nginx:如果您使用的是 websockets,请确保使用最新版本的 nginx (>= 1.3.13),因为它只是添加了对升级连接以使用 websockets 的支持。
【讨论】:
express.static 可以很好地处理 ETag 和缓存控制标头。
:80,而无需以root身份运行node,只需使用authbind:thomashunter.name/blog/using-authbind-with-node-js
只是为了给 pauljz 的答案添加另一个原因,我使用前端服务器,以便在我重新启动后端服务器或由于某种原因崩溃时它可以提供 502 错误页面。这使您的用户永远不会收到有关无法建立连接的错误。
【讨论】:
我相信在任何情况下都可以使用 Node 来提供静态文件只要您知道自己在做什么。使用应用程序服务器来提供静态文件无疑是一种新的范例,因为许多(每一种?)竞争技术(PHP、Ruby、Python 等)都需要在应用程序服务器之前使用像 HTTPD 或 Nginx 这样的 Web 服务器.
我读过的反对使用 Node 提供静态文件的每一个客观原因都围绕着使用你最了解的东西或使用被认为经过更好测试/更稳定的东西的想法。实际上,这些都是非常正当的理由,但几乎没有纯粹的技术相关性。
除非您发现经典 Web 服务器可以提供而 Node 无法提供的功能(我怀疑您会这样做),否则请选择您最了解或您更喜欢使用的功能,因为这两种方法都可以。
至于 Nginx 与 Apache —— 他们将与 Node 一样“玩”。您应该在不考虑 Node 的情况下比较它们。
【讨论】:
systemd、pm2 等的集成。所以有优缺点,用户应该选择可以说是他们的毒药。
将 NGINX 放在 Node 前面有助于更好地处理高连接量。 NGINX 提供 (仅举几例) 缓存、负载平衡、速率限制(使用 leaky桶算法),如果与 Fail2ban 等禁止服务配合使用,可以帮助减轻攻击。
对于生产应用程序,您可以在 NGINX 后面作为反向代理运行您的应用程序服务器,再加上像 Redis 这样的缓存服务器——所有这些服务器都可以位于内容交付网络后面,作为防止 ipv4/ipv6 暴露的另一道防线.
【讨论】:
Node.js 可以完成 Web 服务器的所有任务:提供静态文件、响应 API 调用、在 HTTPS 上运行服务器……还有很多包提供额外的功能,例如记录请求、压缩响应、设置 cookie、防止 XSS 攻击...功能不足可能不是使用另一个 Web 服务器(Apache/Nginx/etc..)来完成 Node.js 的原因。换句话说,对于一个不需要扩展的简单应用程序,您不需要在 Node.js 中添加额外的层,这只会使问题复杂化。
每个网络服务器都有自己的优势。例如,Apache 允许通过 .htaccess 文件对每个目录进行额外的配置。 Nginx 以其在提供静态文件或充当反向代理方面的性能而闻名。 Node.js 在处理 I/O 繁重的系统时提供了巨大的好处...有时,我们需要组合不同 Web 服务器的力量来满足系统的要求。
示例:对于未来可能扩展的企业级应用程序,在 Node.js 应用程序具有一些优势之前将 Nginx 设置为反向代理:
【讨论】:
额外:如果您需要反向代理也很重要,例如在同一端口上执行 Websocket 服务器,或者可能混合一些技术(用 NodeJS 回复一些请求,用 PHP 回复一些其他请求或其他)
【讨论】: