对于在Node.JS上运行的SaaS,是否需要作为反向代理的Web服务器(nginx)或清漆?

时间:2011-07-20 12:43:10

标签: apache node.js nginx webserver reverse-proxy

对于在Node.JS上运行的SaaS,是否需要Web服务器?

如果是,哪一个以及为什么?

仅使用节点会有什么缺点?它的作用是只处理CRUD请求并为客户端提供JSON以解析日期(如Gmail)。

1 个答案:

答案 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模块中具有系统调用包装器以删除具有setgidsetuid的root权限,但AFAIK除了自己编码之外,节点社区还没有看到一个约定出现这样做。有关此主题的更多信息,请参阅this discussion

第三,Web服务器擅长虚拟主机,一般情况下你可以做一些方便的事情(URL重写等),需要在node.js中进行自定义编码才能实现。

第四,nginx非常擅长提供静态文件。比node.js更好(至少现在一点点)。随着时间的推移,这一点可能变得越来越不相关,但在我看来,传统的静态文件Web服务器和Web应用程序服务器仍然具有不同的角色和用途。

“如果是,哪一个以及为什么”?

nginx。因为它具有出色的性能,并且比apache更易于配置。