如何将我的快递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);
答案 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)
尝试修改您的代码,如下所示。
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);