【发布时间】:2014-09-27 05:50:42
【问题描述】:
我在部署到 Heroku 的 node.js 应用程序上强制使用 SSL 时遇到了一些问题。我想在所有场景中强制使用 HTTPS。我也在用 Express。
我已经按照这篇文章的代码:Heroku NodeJS http to https ssl forced redirect (来自 arcseldon 的回答)。
我正在 Chrome 中进行测试。
这是我的测试场景: 如果我访问 www.mywebsite.com,它会重定向到 https://www.mywebsite.com -> 这按我的预期工作。
现在我在https://www.mywebsite.com。如果我进入 Chrome 中的 URL 并将“https”编辑为“http”,然后按 Enter。它只是通过 http 建立连接(我检查了 Chrome 开发人员工具)。
这是我的代码的 sn-ps,以防我做错了什么。
var forceSsl = function (req, res, next) {
if ( req.headers['x-forwarded-proto'] != 'https'){
console.log( 'forceSSL req.get = ' + req.get('Host') + ' req.url = ' + req.url );
return res.redirect('https://' + req.get('Host') + req.url );
} else {
console.log( 'No need to re-direct to HTTPS' );
next();
}
};
if ('development' == app.get('env')) {
console.log('Started in dev mode');
// Other code here
} else if ('production' == app.get('env')) {
console.log('Started in PROD mode');
app.use(forceSsl);
app.use('/public', express.static(__dirname + '/public'));
app.use(express.errorHandler());
mongoose.connect(process.env.MONGOHQ_URL);
}
附带说明,我从未在“forceSsl”函数中看到控制台消息。
我已将我的域配置为指向 heroku 应用的 SSL 版本,所以我不知道它是如何通过 HTTP 建立连接的。
非常感谢您的帮助。
编辑: 在上面我认为它在 Chrome 中工作的测试用例中,我认为 Chrome 正在干预和重定向,因此它可能无法按预期工作。
当我通过 curl 进行测试时,我可以看到该站点通过 HTTP 接受请求并且不执行重定向。
【问题讨论】:
标签: node.js ssl heroku express