在什么情况下,人们更愿意将Node.js仅用作实际部署中的服务器?
当不只想使用Node.js时,Node.js的效果更好? Apache或Nginx?
答案 0 :(得分:181)
在Node.js面前坚持使用另一个网络服务器有几个很好的理由:
我会告诉你第二个要点你应该通过CDN或像Varnish这样的缓存服务器提供静态文件。如果你这样做,那么原点是Node还是Nginx或Apache并不重要。
专门针对nginx的问题:如果您使用的是websockets,请确保使用最新版本的nginx(> = 1.3.13),因为它只是添加了对升级连接以使用websockets的支持。
答案 1 :(得分:61)
为了给pauljz的答案增加一个理由,我使用前端服务器,这样当我重新启动后端服务器时它可以提供502个错误页面,或者由于某种原因它崩溃了。这样,您的用户就不会收到有关无法建立连接的错误。
答案 2 :(得分:25)
我相信,只要您知道自己在做什么,在任何情况下都可以使用Node来提供静态文件。它当然是使用应用程序服务器提供静态文件的新范例,因为许多(每个?)竞争技术(PHP,Ruby,Python等)需要在应用程序服务器前面使用HTTPD或Nginx等Web服务器
我曾经阅读过的每一个客观原因都反对使用Node提供静态文件,这一理由围绕着使用您最了解的内容或使用被认为测试得更好/更稳定的内容的想法。实际上,这些是非常有效的原因,但几乎没有技术相关性。
除非您找到使用Node无法实现的经典Web服务器的功能(我怀疑您会这样做),否则请选择您最了解的内容或您更喜欢使用的内容,因为这两种方法都可以。
对于Nginx和Apache - 他们将与Node“玩”相同。您应该比较它们而不考虑Node。
答案 3 :(得分:2)
将 NGINX 放在 Node 前面有助于更好地处理高连接量。 NGINX 提供(仅举几例) 缓存、负载平衡、速率限制(使用泄漏存储桶算法),如果与 Fail2ban 等禁止服务搭配使用,可以帮助减轻攻击。
对于生产应用程序,您可以在 NGINX 后面运行您的应用程序服务器作为反向代理,再加上像 Redis 这样的缓存服务器 - 所有这些都可以位于内容交付网络后面,作为另一道防线,防止暴露您的 ipv4/ipv6 .
答案 4 :(得分:1)
Node.js 可以完成 Web 服务器的所有任务:提供静态文件、响应 API 调用、在 HTTPS 上运行服务器……还有很多包提供额外的功能,如记录请求、压缩响应、设置 cookie、防止 XSS 攻击...功能不足不太可能成为使用另一个 Web 服务器(Apache/Nginx/等)来完成 Node.js 的原因。换句话说,对于不需要扩展的简单应用程序,您不需要在 Node.js 中添加额外的层,它只会使问题复杂化。
每个网络服务器都有自己的优势。例如,Apache 允许通过 .htaccess 文件对每个目录进行额外配置。 Nginx 以其在提供静态文件或充当反向代理方面的性能而闻名。 Node.js 在处理 I/O 繁重的系统时提供了巨大的好处......有时,我们需要结合不同网络服务器的力量来满足系统的要求。
示例:对于未来可能扩展的企业级应用程序,在 Node.js 应用程序有一些优势之前将 Nginx 设置为反向代理:< /p>
答案 5 :(得分:0)
一个额外的功能:如果您需要反向代理,例如在同一端口上执行Websocket服务器,或者混合使用某些技术(用NodeJS响应某些请求,用PHP响应某些其他请求),也很重要>