NodeJS针对一个域名侦听HTTP和HTTPS

时间:2014-06-13 22:20:31

标签: node.js ssl amazon-web-services express https

我在AWS(亚马逊网络服务器)和DNS" mydomain.com"上使用快递和服务器云。

问题:如何避免我的用户必须使用浏览器网址进行撰写:http://mydomain.com:4000https://mydomain.com:3000

这是我的代码:

sudo node app.js

var app = express();
var server = http.createServer(app).listen(4000, function() {
        console.log('Express HTTP server listening on port ' + app.get('port'));
});
var server = https.createServer(credentials, app).listen(3000, function() {
        console.log('Express HTTPS server listening on port 3000');
});

// redirect all http requests to https
app.use(function(req, res, next) {
  if(!req.secure) {
    return res.redirect(['https://mydomain.com', req.url].join(''));
  }
  next();
});

我希望我的用户能够使用http和https编写我的域名,没有端口号。我已经拥有SSL证书,一切正常,但我还没能删除端口号并同时使用:https和http。

有什么想法吗?请:)

我使用MEAN堆栈(Mongo,Express,Angular,)

1 个答案:

答案 0 :(得分:3)

唯一的方法是使用协议的默认端口。也就是说,端口80用于HTTP,端口443用于HTTPS。

如果您不使用默认协议端口,那么浏览器(或用户正在使用的任何客户端)确定连接哪个端口的唯一方法是让用户在URL中指定它。 / p>

修改 - 解决上述有关不同服务器对象的评论

在您的问题的代码中,您创建一个HTTP服务器,然后使用变量server来保存对象的引用。然后,您创建一个HTTPS服务器并将其分配给同一个变量。如果您稍后在代码中使用server变量,那么您将处理HTTPS服务器对象,但无法引用HTTP服务器对象。

要解决此问题,只需使用两个不同的变量来保存对象引用。

var httpServer = http.createServer ....
var httpsServer = https.createServer ....