3 回答
TA贡献2003条经验 获得超2个赞
使用Heroku Cedar stack和ExpressJS〜3.4.4,这是一个工作代码集。
这里要记住的主要事情是我们正在部署到Heroku。SSL终止发生在负载平衡器上,然后加密的流量到达您的节点应用程序。可以通过req.headers ['x-forwarded-proto'] ==='https'测试是否使用https发出请求。
如果您在其他环境中托管,则无需担心在应用程序等内部是否具有本地SSL证书。但是,如果使用自己的证书,子域等,则应首先通过Heroku加载项应用SSL加载项。
然后只需添加以下内容即可完成从HTTPS到HTTPS以外的任何重定向。这与上面接受的答案非常接近,但是:
确保您使用“ app.use”(用于所有操作,而不仅仅是获取)
明确将forceSsl逻辑外部化为声明的函数
不要将'*'与“ app.use”一起使用-当我测试它时,这实际上失败了。
在这里,我只想在生产中使用SSL。(根据您的需要进行更改)
码:
var express = require('express'),
env = process.env.NODE_ENV || 'development';
var forceSsl = function (req, res, next) {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(['https://', req.get('Host'), req.url].join(''));
}
return next();
};
app.configure(function () {
if (env === 'production') {
app.use(forceSsl);
}
// other configurations etc for express go here...
}
对SailsJS(0.10.x)用户的注释。您可以在api / policies中简单地创建一个策略(enforceSsl.js):
module.exports = function (req, res, next) {
'use strict';
if ((req.headers['x-forwarded-proto'] !== 'https') && (process.env.NODE_ENV === 'production')) {
return res.redirect([
'https://',
req.get('Host'),
req.url
].join(''));
} else {
next();
}
};
然后参考config / policies.js以及其他任何策略,例如:
'*':['已验证”,'enforceSsl']
- 3 回答
- 0 关注
- 786 浏览
添加回答
举报