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

标签 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 版本,但没有用。

最佳答案

这将强制对所有请求使用 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();
    });

关于node.js - 将 AWS EC2 上托管的网站的 http 请求重定向到 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785393/

相关文章:

node.js - 一般搜索 : search between multiple collections (Express/mongoose)

amazon-web-services - 通过 Cloudformation 在 AWS Config 中配置所有 AWS 托管规则

amazon-web-services - Amazon S3 错误代码 403 禁止进入 EMR 集群

node.js - 如何在 MongoDB collection.find() 上获得回调

javascript - 在电子邮件正文中嵌入图像 nodemailer nodejs

node.js - 构建复杂的 Model.find 请求

c++ - 从 Web 工作线程调用 C++ v8 函数

ios - Amazon 链接中不提供 AWSiOSSDKv2

javascript - 用于 web/javascript 的 OpenCV

javascript - 如何使用 NLP 解析自然编写的命令?