I was needed to redirect http to https and found this code:
app.enable('trust proxy');
app.use((req, res, next) => {
if (req.secure) {
next();
} else {
res.redirect('https://' + req.headers.host + req.url);
}
});
I'm using heroku to host my project, I noticed that heroku as default issued *.herokuapp.com
cert, so I can use http and https as well.
When looked at req.secure
within app.use
callback, without app.enable('trust proxy')
, req.secure
is always false
, when I add app.enable('trust proxy')
it's false for about 2 times and after the https
redirection it's switches to true
.
app.enable('trust proxy')
, the docs:
Indicates the app is behind a front-facing proxy, and to use the X-Forwarded-* headers to determine the connection and the IP address of the client.
My question:
Why would my server be behind a proxy?(is it relates to the issued *.herokuapp.com
cert?), if someone could explain how all fits together, I mean, why my server is behind a proxy? and why without app.enable
express won't identify(or accept) secure connection?