Node.js https API服务器,但http为静态文件

我使用Node.js为iPhone客户端创buildAPI服务器。 我也使用这个节点服务器发回一些请求的文件,如静态图像等。

现在我用下面的代码创build一个https服务器:

https.createServer(options,app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); 

这工作正常。

但是,我希望通过HTTP提供静态文件,而不是HTTPS。 这可能吗?

我正在用下面的代码提供静态文件:

 app.use(express.static(path.join(__dirname, 'uploads'))); 

谢谢!

如果你想在同一个端口上这样做,这几乎是在Node.js的SAME端口绑定HTTP和HTTPSstream量的重复? 。

但是,如果您有多个端口(一个用于HTTP,一个用于HTTPS),则可以尝试启动服务器的两个实例。 创build两个应用程序(可以在同一个节点文件中完成),一个用于实际的API,然后是一个称为staticApp的较小的应用程序,用于提供静态内容。 然后你的代码启动你的API服务器是一样的,你可以使用

 http.createServer(app).listen(app.get('port'), function(){ console.log("Static server listening on port " + app.get('port')); }); 

为了避免混淆,你也可以在你的API服务器中将“port”variables的名称改为“ssl-port”,这样你就不会感到困惑了。

这将有效地创build两个服务器; 一个通过HTTP提供静态内容,并通过HTTPS保留原始的API服务器。 只要确定你使用的是80/443(标准),这样端口就可以被协议所解释(即http://mydomain.com和https://mydomain.com去正确的位置),或者您的负载平衡器或任何代理您的stream量正在发送正确的协议到正确的端口。

请注意,这将给尝试通过HTTP访问API的任何人提供404(最有可能)。 解决scheme可以是添加匹配您的API端点的通用路由(类似于api / *,如果这是您的结构设置的),将用户redirect到使用https协议的相同path。

回应你的评论

两个在一个文件中做两个应用程序,只是做一些事情:

 var api = express(); api.configure(function(){ app.set('ssl_port', [your https port]); //your api code }); var static = express(); static.configure(function () { app.set('port', [your http port]); // Set the port app.use(express.static(path.join(__dirname, 'static'))); //This will serve everything inside '/static' as static content }) 

太创build两个服务器:

 //HTTPS Api Server https.createServer(https_options, app).listen(app.get('ssl_port'), function(){ console.log("Api server listening on port " + app.get('ssl_port')); }); //HTTP Static Server http.createServer(static).listen(static.get('port'), function () { console.log('Static server listening on %s', static.get('port')); });