我在AWS(亚马逊网络服务器)和DNS" mydomain.com"上使用快递和服务器云。
问题:如何避免我的用户必须使用浏览器网址进行撰写:http://mydomain.com:4000和https://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,)
答案 0 :(得分:3)
唯一的方法是使用协议的默认端口。也就是说,端口80用于HTTP,端口443用于HTTPS。
如果您不使用默认协议端口,那么浏览器(或用户正在使用的任何客户端)确定连接哪个端口的唯一方法是让用户在URL中指定它。 / p>
修改 - 解决上述有关不同服务器对象的评论
在您的问题的代码中,您创建一个HTTP服务器,然后使用变量server
来保存对象的引用。然后,您创建一个HTTPS服务器并将其分配给同一个变量。如果您稍后在代码中使用server
变量,那么您将处理HTTPS服务器对象,但无法引用HTTP服务器对象。
要解决此问题,只需使用两个不同的变量来保存对象引用。
var httpServer = http.createServer ....
var httpsServer = https.createServer ....