2013-09-27 24 views

cevap

9

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); 
+0

Ö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

+0

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

+1

İkinci tekniği de işe yaramaz. – user883499

1

Sen EC2 örneğinde nginx yapılandırma dosyasını düzenleyebilirsiniz. SSH /etc/nginx/conf.d

  • açık 00_elastic_beanstalk_proxy.conf sudo vi 00_elastic_beanstalk_proxy.conf
  • koymak gidin örneği EC2 ve aşağıdaki adımları

    1. takip etmek

      location/{ if ($http_x_forwarded_proto != 'https') { rewrite^https://$host$request_uri? permanent; } … }

    2. yeniden nginx sudo /usr/sbin/nginx -s reload