对于在Node.JS上运行的SaaS,是否需要Web服务器?
如果是,哪一个以及为什么?
仅使用节点会有什么缺点?它的作用是只处理CRUD请求并为客户端提供JSON以解析日期(如Gmail)。
答案 0 :(得分:5)
“是必要的网络服务器”?
从技术上讲,没有。实际上,是的,通常使用单独的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做出一些宣布。< / p>
其次,绑定到1024个以下的端口(如80和443)需要将进程设置为root。 nginx和其他人自动以root身份处理绑定,然后将权限删除到更安全的用户帐户(通常是www-data或nobody)。尽管node.js在process
模块中具有系统调用包装器以删除具有setgid
和setuid
的root权限,但AFAIK除了自己编码之外,节点社区还没有看到一个约定出现这样做。有关此主题的更多信息,请参阅this discussion。
第三,Web服务器擅长虚拟主机,一般情况下你可以做一些方便的事情(URL重写等),需要在node.js中进行自定义编码才能实现。
第四,nginx非常擅长提供静态文件。比node.js更好(至少现在一点点)。随着时间的推移,这一点可能变得越来越不相关,但在我看来,传统的静态文件Web服务器和Web应用程序服务器仍然具有不同的角色和用途。
“如果是,哪一个以及为什么”?
nginx。因为它具有出色的性能,并且比apache更易于配置。