2016-11-24 95 views
0

设置:域名在Godaddy处购买,网站在AWS EC2实例中的nodejs环境中托管。 (SSL还购买了HTTPS的目的)将http请求重定向到https,用于AWS EC2上托管的网站

问题:

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.comhttp://www.domain.comhttp://domain.com请求不是:我用下面的代码已经设置SSL获得转发到https版本。 (服务器错误)。请提供解决方案来解决这个问题。我尝试将域名转发到godaddy的https版本,这是没用的。

回答

0

这将强制https对所有请求。您可能想要在它前面检查“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(); 
    }); 
+0

不工作@Dave – Vignesh

+0

@Vignesh从代码粘贴的副本我已经在几个地方运行,所以它适用于我。也许解释它是如何工作的。 –

相关问题