Bugün, 10 Ekim 2014 itibariyle , Heroku Cedar yığını ve ExpressJS ~ 3.4.4 kullanılarak , işte çalışan bir kod seti.
Burada hatırlanması gereken en önemli şey, Heroku'ya konuşlandırmaktayız. SSL sonlandırma, şifreli trafik düğüm uygulamanıza ulaşmadan önce yük dengeleyicide gerçekleşir. İstek yapmak için https'nin kullanılıp kullanılmadığını req.headers ['x-forwarded-proto'] === 'https' ile test etmek mümkündür .
Başka ortamlarda barındırıyor olabileceğiniz gibi, uygulama içinde yerel SSL sertifikaları vb. İle ilgilenmemize gerek yok. Ancak, kendi sertifikanızı, alt alan adlarınızı vb. Kullanıyorsanız öncelikle Heroku Eklentileri aracılığıyla bir SSL Eklentisi uygulamanız gerekir.
Ardından, yönlendirmeyi HTTPS'den HTTPS'ye başka herhangi bir şeyden yapmak için aşağıdakileri ekleyin. Bu, yukarıda kabul edilen cevaba çok yakın, ancak:
- "App.use" kullanmanızı sağlar (yalnızca alma değil tüm eylemler için)
- ForceSsl mantığını açık bir şekilde bildirilmiş bir işleve dışsallaştırır
- "App.use" ile '*' kullanmıyor - bu gerçekten test ettiğimde başarısız oldu.
- Burada sadece üretimde SSL istiyorum. (İhtiyaçlarınıza göre değiştirin)
Kod:
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) kullanıcıları için not. Api / policies içinde basitçe bir politika (forceSsl.js) oluşturabilirsiniz:
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();
}
};
Ardından, diğer politikalarla birlikte config / policies.js'den referans alın, örneğin:
'*': ['doğrulanmış', 'zorlaSsl']
app.get('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') res.redirect('https://mypreferreddomain.com'+req.url) else next() })