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”(用于所有操作,而不僅僅是獲?。?/p>
明確將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 關注
- 843 瀏覽
添加回答
舉報