2011-11-16 17 views

Respuesta

9

Implemento en Heroku también. Agregan un montón de sus encabezados cuando usan nginx para invertir el proxy. El de interés en este caso sería x-forward-proto.

Esto es lo que hice:

app.get(/\/register$/, function(req, res){ 
    console.log(JSON.stringify(req.headers)); //to see all headers that heroku adds 
    if(req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { 
    res.redirect("https://" + req.headers.host + req.url); 
    } 
    else { 
    //the rest of your logic to handle this route 
    } 
}); 
+0

¡Genial! Esto ayudó mucho. +1 :) –

0

Para ejecutar un servidor seguro (https) tendría que crearse independientemente de un servidor no seguro (http). También escucharían en puertos separados. Intentar algo como esto:

var express = require('express) 
    , app_insecure = express.createServer() 
    , app_secure = express.createServer({ key: 'mysecurekey' }) 

app_insecure.get('/secure-page',function(req, res){ 
    // This is an insecure page, redirect to secure 
    res.redirect('https://www.mysecuresite.com/secure-page') 
}) 

app_secure.get('/secure-page', function(req,res){ 
// Now we're on a secure page 
}) 

app_insecure.listen(80) 
app_secure.listen(443) 

O esto podría ser implementado como ruta middleware

var redirect_secure = function(req, res, next){ 
    res.redirect('https://mysite.com' + req.url) 
} 

app_insecure.get('/secure-page',redirect_secure,function(req, res){}) 

Ahora sólo tendría que incluir una referencia de función: redirect_secure() en los caminos que le gustaría redirigidas a un lugar seguro

+0

el ssl cuestas en heroku significaría que estoy corriendo un único servidor que puede tomar tanto seguro en las conexiones inseguras, probablemente un certificado seguro instalado en el equilibrador de carga, y yo tendría que examinar si de alguna manera Estoy recibiendo tráfico seguro. Lo que significa que mi servidor inseguro aún puede ejecutarse en https ssl sin que tenga que crear explícitamente un servidor seguro. – MonkeyBonkey

1

app.enable ('confianza proxy');

"Usar Express detrás de un proxy inverso como Varnish o Nginx es trivial, sin embargo requiere configuración. Al habilitar la configuración de" trust proxy "a través de app.enable ('trust proxy'), Express sabrá que es sentado detrás de un proxy y que los campos de encabezado X-Forwarded- * pueden ser de confianza, que de otra manera se pueden falsificar fácilmente ".

Express behind proxies doco

Cuestiones relacionadas