使express.js或节点通过端口443接受http连接

时间:2014-02-04 18:21:58

标签: node.js ssl express

我使用通过SSL进行通信的节点构建REST API。服务器构建使用express并使用vhosts和cors。我最近在端口80上添加了一个监听器,所以我可以强制使用HTTPS。在我测试时,我尝试访问http://manage.domain.com:443/,但请求只是挂起。听众似乎都不接受它。我想要做的就是将该请求重定向到https。

1 个答案:

答案 0 :(得分:1)

我假设您已经知道这一点,但您需要https服务器(duh)来提供HTTPS内容。你运行它的端口并不重要; 443只是HTTPS的默认端口。如果您希望HTTP请求重定向到HTTPS,则需要http和https服务器。以下是您的应用文件应如何显示的示例:

var http = require('http'),
    https = require('https'),
    express = require('express')
    fs = require('fs');

var domain = 'localhost';

var app = express();
app.get('*', function(req, res){
    // redirect to HTTPS
    res.redirect('https://' + domain + req.path);
});

http.createServer(app).listen(80, function(){
    console.log('HTTP listening on port 80');
});

var appSecure = express();
// configure your app here

var options = {
  key: fs.readFileSync('ssl_key.pem'),
  cert: fs.readFileSync('ssl_cert.crt'),
};

https.createServer(options, appSecure).listen(443, function(){
    console.log('HTTPS listening on port 443');
});

显然,您需要使用SSL密钥和证书才能使其正常工作。

您可能知道,大多数系统都需要提升权限才能打开小于1025的端口;因此,如果您使用端口80和端口443,则必须使用提升的权限运行应用服务器(如果您在OSX / Linux / BSD上运行,只需执行sudo node app.js)。