对于在 Node.JS 上运行的 SaaS,是否需要 Web 服务器?
如果是,是哪一个以及为什么?
仅使用 Node 有什么缺点?它的作用是处理 CRUD 请求并返回 JSON 供客户端解析日期(如 Gmail)。
最佳答案
“是否需要网络服务器”?
从技术上讲,不。实际上,通常会使用单独的 Web 服务器,并且有充分的理由。
在 this talk by Ryan Dahl in May 2010 ,在 37'30"他表示,出于“安全原因”,他建议在反向代理或 Web 服务器后面运行 Node.js。详细说明一下,像 nginx 或 apache 这样的强化 Web 服务器的 TCP 堆栈已经发展了很长时间在稳定性和安全性方面,Node.js 还没有处于同一水平。因此,由于将 Node.js 放在 nginx 后面很容易,不会产生太多负面后果,并且理论上会在一定程度上提高部署的安全性,因此是一个不错的选择。在某个时间点,node.js 可能会被正式视为“准备好实时直接互联网连接”,但请等待 Ryan/Joyent 对此做出一些声明。
其次,绑定(bind)到 sub-1024 端口(如 80 和 443)需要进程是 root。 nginx 和其他自动处理作为 root 的绑定(bind),然后将权限删除到更安全的用户帐户(通常为 www-data 或无人)。尽管node.js在process
模块中有系统调用包装器,可以使用setgid
和setuid
删除root权限,据我所知,除了自己在 Node 上编码之外社区还没有看到这样做的惯例。有关此主题的更多信息,请参阅 this discussion .
第三,Web 服务器擅长虚拟托管,通常您可以做一些方便的事情(URL 重写等),但需要在 Node.js 中进行自定义编码才能实现。
第四,nginx 非常擅长提供静态文件。比 node.js 好(至少现在好一点)。同样,随着时间的推移,这一点可能会变得越来越不相关,但在我看来,传统的静态文件 Web 服务器和 Web 应用程序服务器仍然具有不同的角色和目的。
“如果是,是哪一个以及为什么”?
nginx 。因为它的性能很好,而且配置比apache更简单。
关于apache - 对于在 Node.JS 上运行的 SaaS,是否需要 Web 服务器 (nginx) 或清漆作为反向代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762068/