设置:在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.com和https://domain.com,但http://www.domain.com或http://domain.com请求未转发到https版本。 (服务器错误)。请提供解决方案来解决这个问题。我尝试将域转发到godaddy中的https版本,这是没用的。
答案 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();
});