Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJ在HTTP和HTTPS上侦听单个域名_Node.js_Ssl_Amazon Web Services_Express_Https - Fatal编程技术网

Node.js NodeJ在HTTP和HTTPS上侦听单个域名

Node.js NodeJ在HTTP和HTTPS上侦听单个域名,node.js,ssl,amazon-web-services,express,https,Node.js,Ssl,Amazon Web Services,Express,Https,我在AWS(亚马逊网络服务器)上使用express和服务器云,以及DNS“mydomain.com” 问题:如何避免我的用户不得不在浏览器中写入URL:和 这是我的代码: sudo节点app.js var app = express(); var server = http.createServer(app).listen(4000, function() { console.log('Express HTTP server listening on port ' + app.g

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

问题:如何避免我的用户不得不在浏览器中写入URL:和

这是我的代码:

sudo节点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

有什么想法吗?请:)


我使用meanstack(Mongo、Express、Angular等)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

除了我回答的非默认端口问题之外,您的代码中还有一个问题,即您正在创建两个服务器对象,但将这两个对象都分配给一个变量。如果你想在代码中访问两个服务器,你需要两个不同的变量。我不明白你的答案,你能给我一个代码示例吗?please@AndrewCooper,我的应用程序非常广泛,如果我使用两个应用程序,我将不得不复制我的所有代码,但如何使用两个服务器对象和两个应用程序而不复制我的代码?除了我回答的非默认端口问题之外,您的代码中有一个问题,即您正在创建两个服务器对象,但将这两个对象都分配给一个变量。如果你想在代码中访问两个服务器,你需要两个不同的变量。我不明白你的答案,你能给我一个代码示例吗?please@AndrewCooper,我的应用程序非常广泛,如果我使用两个应用程序,我将不得不复制我的所有代码,但如何使用两个服务器对象和两个应用程序而不复制我的代码?除了我回答的非默认端口问题之外,您的代码中有一个问题,即您正在创建两个服务器对象,但将这两个对象都分配给一个变量。如果你想在代码中访问两个服务器,你需要两个不同的变量。我不明白你的答案,你能给我一个代码示例吗?please@AndrewCooper,我的应用程序非常广泛,如果我使用两个应用程序,我将不得不复制我的所有代码,但如何使用两个服务器对象和两个应用程序而不复制我的代码?除了我回答的非默认端口问题之外,您的代码中有一个问题,您正在创建两个服务器对象,但将这两个对象都分配给了一个