düzenleme: Aşağıdaki benim orijinal cevap 4.x için bir dize http
veya req.protocol
yılında https
, thx @BrandonClark
kullanım req.get
değil req.headers
alabilirsiniz ekspres 3.x içindir . POST istekleri ve GET dışındaki tüm diğer öğelerin bu aracı olduğunu görmeyeceğini unutmayın. Bu Express yönlendirmek zaman karşısında x-forwarded-proto
başlığını taşımaz olması da mümkündür. Bunu kendiniz ayarlamanız gerekebilir.
app.get('*', function(req, res, next) {
//http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-proto
if (req.get('x-forwarded-proto') != "https") {
res.set('x-forwarded-proto', 'https');
res.redirect('https://' + req.get('host') + req.url);
} else {
next();
}
});
https zorlamak için başka bir yol:
function ensureSecure(req, res, next){
if(req.secure){
// OK, continue
return next();
};
res.redirect('https://'+req.host+req.url); // handle port numbers if non 443
};
app.all('*', ensureSecure);
Önerilerinizi denediniz ve hala çalışmıyor. Elastik Yük dengeleyici uygun üstbilgileri ayarlamıyor. res.set ('x-forwarded-proto', 'https'); '' de çalışmıyor. – user883499
Amazon'un neden üstbilgiyi ayarlamadığını veya ikinci tekniğimi deneyin. Res.header'ın 'res.set' ile özdeş olduğunu fark ettim, üzgünüm! yük dengeleyici uygulamasına daima (her zaman yanlış req.secure) isteği bir http verir – Plato
İkinci tekniği de işe yaramaz. – user883499