将http请求重定向到AWS EC2上托管的网站的https

时间:2016-11-24 11:35:31

标签: node.js amazon-web-services express ssl amazon-ec2

设置:在Godaddy购买域名,网站在nodejs环境中托管在AWS EC2实例中。 (SSL也是为https目的而购买的)

问题:我使用以下代码设置了SSL:

var https = require('https');
var http = require('http');
const config = require('./config');
const fs = require('fs');

var app = express();
var redirectApp = express();

var options = {
    key: fs.readFileSync(config.sslKeyPath),
    cert: fs.readFileSync(config.sslCertPath),
    ca: fs.readFileSync(config.sslCaPath)
};

var server = https.createServer(options, app);
var redirectServer = http.createServer(redirectApp);

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

server.listen(httpsport, function() {
    console.log("Listening on " + port);
});

redirectServer.listen(httpport, function() {
    console.log("Listening on " + port);
});

部署后,我可以访问https://www.domain.comhttps://domain.com,但http://www.domain.comhttp://domain.com请求未转发到https版本。 (服务器错误)。请提供解决方案来解决这个问题。我尝试将域转发到godaddy中的https版本,这是没用的。

1 个答案:

答案 0 :(得分:1)

这将强制https对所有请求。您可能希望将if放在其前面以检查“dev”或“production”环境变量。

    app.use(function(req, res, next) {
      if ((req.get('X-Forwarded-Proto') !== 'https')) {
        res.redirect('https://' + req.get('Host') + req.url);
      } else
        next();
    });
相关问题