通过FastCGI使用ExpressJS应用程序

刚刚开始处理NodeJSnetworking应用程序,并有一个基本的问题。

由于我来自PHP领域,我知道PHP有一个内置的HTTP服务器,但没有人实际使用它,我们使用nginx和在史前项目Apache作为HTTP服务器,当我进入ExpressJS我发现所有的例子谈论听ExpressJS打开的HTTP服务器(通过http NodeJS模块当然),但没有人谈论通过FastCGI(nginx的 – > FastCGI的(例如node-fastcgi ) – >我的ExpressJS应用程序)像我用PHP (nginx – > PHP-fpm – >我的PHP环境),我想知道为什么?

据我了解,NodeJS应用程序是非常快速,非阻塞I / O等,但有一个使用应用程序的安全漏洞,因为运行的服务在JavaScript环境中具有相同的公共资源,一个用户例如,可以与他人共享错误(或不)敏感信息。 让我们假设开发者犯了一个这样的错误:

router.post('/set-user-cc', function(res){ global.user = new User({ creditCard: req.param('cc') }); }); 

和其他用户做这样的要求:

 router.get('/get-user-cc', funciton(req, res){ res.json(global.user); }); 

此时每个用户将获得用户的CC信息。

通过FastCGI使用我的ExpressJS应用程序将为每个HTTP请求打开一个干净的JavaScript环境,用户不会互相伤害。

很高兴听到NodeJS(networking)应用程序经验丰富的开发人员为什么没有人build议使用FastCGI解决scheme(search谷歌,几乎没有发现),如果是这样,为什么它太糟糕了?

(ps这个例子只是为了certificate这个问题不是某个人真正做的事情,但是正如我们所知,很多愚蠢的人存在于宇宙中:)

谢谢!

如果你把你的代码 放在严格模式下运行 ,而不使用像这样的全局变量,那么你不会犯这样的错误。

另外,在nodejs Web应用程序中,您通常希望使服务器成为无状态,并将所有数据保留在数据库中。 这也将使其成为一个更可扩展的架构。

在安全性非常重要的应用程序中,您可以对其进行大量的模糊测试以查找类似的问题。

如果你这样做,加上严格的代码审查过程,你根本不用担心。

基本上使用fastCGI,尽管它的名字fast ,但与使用节点的http服务器相比,速度会很慢。

在fastCGI解决方案下,我们可以处理的并发连接数等于nodejs进程数。 从nodejs文档:

假设每个新节点至少有30ms启动和10MB内存。 也就是说,你不能创造数千个。

所以有1GB的RAM,你只能有不到100连接。

在节点通常的http服务器方式,你不会有这个问题,每个连接将取代小于1MB。

另外我会说在node.js中增加异步编程的复杂性,每个进程只有一个连接可能是不值得的,因为

节点的全部点都是异步I / O,就是在同一个进程上处理多个连接的效率,但是使用fastCGI只是抛弃了大部分优点。

使用fastCGI的节点的唯一优点是它在javascript中。 如果你只知道JavaScript或者喜欢它,并且必须将它与现有的fastCGI服务器集成,那么nodejs可能是一个可行的解决方案,否则我不建议这样做。

而你错了:

通过FastCGI使用我的ExpressJS应用程序将为每个HTTP请求打开一个干净的JavaScript环境,用户不会互相伤害。

正如vkurchatkin 所说 ,一旦一个进程完成一个请求,就会收到下一个请求处理。 FastCGI方法可能会发生这种错误。 我做了一些阅读,而且FastCGI的速度很快,就是它重用了进程,而不是为每个请求创建它们。