在实际部署中,什么情况下应该只使用Node.js作为服务器?
当不想仅使用Node.js时,与Node.js搭配更好的是Apache还是Nginx?
在实际部署中,什么情况下应该只使用Node.js作为服务器?
当不想仅使用Node.js时,与Node.js搭配更好的是Apache还是Nginx?
在Node.js前面添加另一个Web服务器有几个好处:
我要附带说明第二个要点,即您应该通过CDN或从类似Varnish的缓存服务器后面提供静态文件。如果您这样做,则原点是Node还是Nginx或Apache并不重要。
特别注意nginx:如果您使用Websockets,请确保使用最新版本的nginx(>= 1.3.13),因为它只是在最近添加了升级连接以使用Websockets的支持。
除了pauljz的答案外,我还想再给出一个原因:我使用前端服务器,这样在重启后端服务器或由于某些原因导致其崩溃时,可以提供502错误页面。这使得用户永远不会收到关于无法建立连接的错误信息。
我认为,在任何情况下,只要你知道你在做什么,使用Node来提供静态文件都是可以的。将应用服务器用于提供静态文件确实是一种新的范例,因为许多(甚至所有?)竞争技术(如PHP、Ruby、Python等)需要像HTTPD或Nginx这样的Web服务器位于应用服务器之前。
我曾经读到的反对使用Node提供静态文件的每一个客观理由都围绕着使用最熟悉的工具或使用被认为更经过测试/更稳定的工具。从实际角度来看,这些都是非常有效的理由,但纯粹技术上讲,它们并不重要。
除非你找到了一种经典Web服务器可以实现而Node无法实现的功能(我怀疑你会找到),否则选择你最熟悉的或者你更喜欢的方法都是可以的。
至于Nginx与Apache的比较——它们与Node的“配合”是相同的。你应该忽略Node,将它们进行比较。
systemd
、pm2
等的集成问题。因此,有优点和缺点,用户应该自行选择。 - user636044Node.js可以完成Web服务器的所有任务:提供静态文件、响应API调用、在HTTPS上运行服务器等。此外,有许多软件包提供额外的功能,如记录请求、压缩响应、设置cookie、防止XSS攻击等。在没有必要使用其他Web服务器(如Apache/Nginx等)来完善Node.js的情况下,缺乏功能可能不太可能是一个原因。换句话说,对于不需要扩展的简单应用程序,您不需要为Node.js添加额外的层次,这只会让问题更加复杂。
每个Web服务器都有自己的优势。例如,Apache允许通过.htaccess文件进行每个目录的附加配置。Nginx在提供静态文件或作为反向代理时的性能表现突出。当处理I/O密集型系统时,Node.js提供了巨大的好处... 有时,我们需要结合不同的Web服务器的优势以满足系统的需求。
例如:对于可能在未来需要扩展的企业级应用程序,在Node.js应用程序之前设置Nginx作为反向代理具有以下优点:
express.static
可以很好地处理ETags和缓存控制头。 - robertklep