Express 4 - 将HTTP重定向到所有路由的HTTPS

时间:2014-10-30 23:51:11

标签: javascript node.js express https

如何将我的快递4应用程序中的所有路由的http://请求重定向到https://?

This answer does not work, it results in a redirect loop error

我正在使用Express 4路由器,如下所示:

var router = require('express').Router();

router.post('/signup', app.signup);

app.use('/', router);

2 个答案:

答案 0 :(得分:1)

由于您正在获得重定向循环,我认为它可能与您的快速服务器前面的代理相关。如果您使用nginx代理呼叫,通常就是这种情况。

我正在做的是更新nginx配置以将原始方案转发为自定义标头,并在我的快速中间件中使用它,即将其添加到您的站点配置

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

然后在您的快递中,您需要添加一个中间件,例如

app.use(function(req, res, next) {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect('https://' + req.headers.host + req.originalUrl);
  }
  else {
    next();
  }
});

这应该允许您正确地重定向。

答案 1 :(得分:0)

尝试修改您的代码,如下所示。

它会将所有http://请求重定向到https://

var router = require('express').Router();

app.set('sslPort', 443);

//For redirecting to https
app.use(function (req, res, next) {
    // Checking for secure connection or not
    // If not secure redirect to the secure connection
    if (!req.secure) {
        //This should work for local development as well
        var host = req.get('host');

        // replace the port in the host
        host = host.replace(/:\d+$/, ":" + app.get('sslPort'));

        // determine the redirect destination
        var destination = ['https://', host, req.url].join('');

        return res.redirect(destination);
    }
    next();
});

router.post('/signup', app.signup);

app.use('/', router);