将http重定向到https express.js

Jac*_*ler 4 https web-services node.js express

我试图重新路由http (80)https (443)在我的快递应用程序.我正在使用一些中间件来做到这一点.如果我去找我https://my-example-domain.com,一切都很好.但如果我去,http://my-example-domain.com它不会重定向,也没有任何显示.

我也在我的ubuntu服务器上安装了一些iptables

sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443




function requireHTTPS(req, res, next) {
  if (!req.secure) {
    return res.redirect('https://' + req.headers.host + req.url);
  }
  next();
}

// all environments
app.set('port', process.env.PORT || 8443);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(requireHTTPS);  // redirect to https
app.use(express.json());
app.use(express.urlencoded());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function(req, res){
    res.render('index');
})

https.createServer(options, app).listen(8443);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我只需要添加另一条iptables规则吗?或者我是否需要在我的应用程序中配置某些内容?

所以基于下面的一个答案,我不认为它是一个中间件问题,而是一个端口问题.例如:如果我去http://my-example-domain.com,则无效.但是如果我添加端口8443,http: //my-example-domain.com:8443 ,它会重定向.

pyk*_*iss 6

var redirectApp = express () ,
redirectServer = http.createServer(redirectApp);

redirectApp.use(function requireHTTPS(req, res, next) {
  if (!req.secure) {
    return res.redirect('https://' + req.headers.host + req.url);
  }
  next();
})

redirectServer.listen(8080);
Run Code Online (Sandbox Code Playgroud)