Если вы хотите использовать традиционные два порта, возможно, работает одно из вышеперечисленных решений, но используя httpolyglot, вы действительно можете легко иметь http и https на одном и том же порту с одинаковыми промежуточными программами.
https://github.com/mscdex/httpolyglot
Вот некоторый скелетный код, который работал для меня:
var express = require('express');
var fs = require('fs');
var httpolyglot = require('httpolyglot');
var app = express();
const options = {
key: fs.readFileSync("/etc/ssl/certs/key"),
cert: fs.readFileSync("/etc/ssl/certs/cer.cer")
};
httpolyglot.createServer(options, app).listen(port);
, и если вы хотите пересылку http -> https, вы можете просто добавить эту функцию промежуточного программного обеспечения перед вызовом createServer ():
app.use(function(req, res, next) {
if (!req.secure ) {
res.redirect (301, 'https://' + req.hostname + ':port' + req.originalUrl);
}
next();
});
Это можно настроить на пользовательский порт