3 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
使用Heroku Cedar stack和ExpressJS?3.4.4,這是一個(gè)工作代碼集。
這里要記住的主要事情是我們正在部署到Heroku。SSL終止發(fā)生在負(fù)載平衡器上,然后加密的流量到達(dá)您的節(jié)點(diǎn)應(yīng)用程序??梢酝ㄟ^req.headers ['x-forwarded-proto'] ==='https'測(cè)試是否使用https發(fā)出請(qǐng)求。
如果您在其他環(huán)境中托管,則無需擔(dān)心在應(yīng)用程序等內(nèi)部是否具有本地SSL證書。但是,如果使用自己的證書,子域等,則應(yīng)首先通過Heroku加載項(xiàng)應(yīng)用SSL加載項(xiàng)。
然后只需添加以下內(nèi)容即可完成從HTTPS到HTTPS以外的任何重定向。這與上面接受的答案非常接近,但是:
確保您使用“ app.use”(用于所有操作,而不僅僅是獲取)
明確將forceSsl邏輯外部化為聲明的函數(shù)
不要將'*'與“ app.use”一起使用-當(dāng)我測(cè)試它時(shí),這實(shí)際上失敗了。
在這里,我只想在生產(chǎn)中使用SSL。(根據(jù)您的需要進(jìn)行更改)
碼:
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...
}
對(duì)SailsJS(0.10.x)用戶的注釋。您可以在api / policies中簡單地創(chuàng)建一個(gè)策略(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以及其他任何策略,例如:
'*':['已驗(yàn)證”,'enforceSsl']
- 3 回答
- 0 關(guān)注
- 837 瀏覽
添加回答
舉報(bào)