javascript - sitepoint - cucumber js
Forzar SSL con expressjs 3 (2)
Estoy ejecutando un servidor node.js express 3 sin proxy y usando SSL.
Estoy intentando descubrir cómo forzar todas las conexiones para pasar por https.
La búsqueda en Google me muestra esto:
https://groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY
Actualmente no hay forma de forzar las redirecciones de https, aunque eso parece ser un poco extraño. Tenemos una aplicación de solo https y solo tenemos un servidor simple ~ 4 de nodo de línea que redirige, nada elegante
Que es lo que necesito, pero él no dice cuáles son esas 4 líneas.
Cómo hacemos esto? Gracias.
Debería crear un segundo servidor escuchando en 80 y redirigir con un encabezado 301 a su servidor https:
var express = require(''express'');
var app = express();
app.get(''/'', function(req, res, next){
res.redirect(''https://'' + app.address().address)
});
app.listen(80);
Realmente no entiendo el punto de comenzar dos servidores cuando solo uno puede hacer el trabajo perfectamente. Por ejemplo, al agregar un middleware simple en su archivo de servidor:
app.use(function(req, res, next) {
if(!req.secure) {
return res.redirect([''https://'', req.get(''Host''), req.url].join(''''));
}
next();
});
Esto redirigirá cualquier solicitud no segura a la página HTTPS correspondiente. Por ejemplo, http://example.com/
a https://example.com/
y http://example.com/foo?bar=woo
a https://example.com/foo?bar=woo
. Este es definitivamente el comportamiento que esperaría. Tal vez deberías filtrar esto por el host, por lo que redirige solo en los dominios que posees e instaló un certificado adecuado.
Si su aplicación se ejecuta detrás de otro servidor como Nginx, es posible que desee agregar el parámetro de configuración app.set(''trust proxy'', true)
. O, mejor aún, haz que Nginx haga el redireccionamiento, que será más eficiente que cualquier aplicación de Node.js.
Editar: de acuerdo con mis puntos de referencia, join
es un poco más rápido que +
para concatenar cadenas. Nada dramático, pero cada victoria es una victoria ...