我正在使用Node.js为iPhone客户端制作API服务器。我还使用此节点服务器发送回一些请求的文件,例如静态图像等。
现在,我正在使用以下代码创建一个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')));
谢谢!
最佳答案
如果您希望在同一端口上执行此操作,那么这几乎是Binding HTTP and HTTPS traffic on the SAME port in node.js?的副本。
但是,如果您有多个端口(一个用于HTTP,一个用于HTTPS),则可以尝试仅启动服务器的两个实例。创建两个应用程序(可以在同一节点文件中完成),一个用于实际的API,然后创建一个较小的名为staticApp的应用程序,用于提供静态内容。然后,用于启动API服务器的代码是相同的,您可以使用
http.createServer(app).listen(app.get('port'), function(){
console.log("Static server listening on port " + app.get('port'));
});
为避免混淆,您还可以在API服务器中将“ port”变量的名称更改为“ ssl-port”之类的名称,以免引起混淆。
这将有效地创建两个服务器;一个通过HTTP提供您的静态内容,而保留原始的API服务器通过HTTPS提供服务。只需确保您使用的是80/443(标准),以便协议正确解释端口(即http://mydomain.com和https://mydomain.com放在正确的位置),或者是负载均衡器或任何代理您的流量将正确的协议发送到正确的端口。
请注意,这将为尝试通过HTTP访问您的API的用户提供404(最有可能)。一种解决方案可能是添加与您的API端点匹配的通用路由(类似于api / *,如果这是您的结构所设置的),则可以使用https协议将用户重定向到同一路径。
回应您的评论
两个在一个文件中创建两个应用程序,只需执行以下操作:
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
})
太创建了两个服务器:
//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'));
});
关于node.js - Node.js https API服务器,但http表示静态文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15313274/