gpt4 book ai didi

node.js - NodeJS 监听一个域名的 HTTP 和 HTTPS

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:55 25 4
gpt4 key购买 nike

我在 AWS(亚马逊网络服务器)和 DNS“mydomain.com”上使用 express 和服务器云。

问题:如何避免我的用户必须在浏览器中写入 URL: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,)

最佳答案

唯一的方法是使用协议(protocol)的默认端口。即,HTTP 的端口 80 和 HTTPS 的端口 443。

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

编辑 - 解决您上面关于不同服务器对象的评论

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

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

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

关于node.js - NodeJS 监听一个域名的 HTTP 和 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com