【问题标题】:Redirect http requests to https for website hosted on AWS EC2针对 AWS EC2 上托管的网站将 http 请求重定向到 https
【发布时间】:2017-04-08 16:45:12
【问题描述】:

设置:域名在 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版本,它没有用。

【问题讨论】:

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


    【解决方案1】:

    这将对所有请求强制使用 https。您可能需要将 if 放在它前面以检查“开发”或“生产”环境变量。

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

    【讨论】:

    • 不工作@Dave
    • @Vignesh 复制粘贴自我在几个地方运行的代码,因此它适用于我。也许解释一下它是如何不起作用的。
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 2017-01-22
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多