【问题标题】:express 4.x redirect http to httpsexpress 4.x 将 http 重定向到 https
【发布时间】:2014-07-23 19:06:37
【问题描述】:

我有以下代码:

var https        = require('https');
var http         = require('http');
var express      = require('express');
var app          = express();
var router       = express.Router();

app.use('/', router);

//have 'server' listen for https
var server = https.createServer(config.sslCredential, app);
server.listen(config.serverPort);

//listen server on http, and always redirect to https
var httpServer = http.createServer(function(req,res){
    res.redirect(config.serverDomain+req.url);
});
httpServer.listen(config.httpServerPort);

但不知何故,我无法将 https 请求重定向到 https 请求,我应该如何在 node.js 上使用 express 4.x 正确执行此操作?

【问题讨论】:

    标签: javascript node.js http redirect express


    【解决方案1】:

    引用my own answer 的中间件解决方案(顺便说一句,在 express 3.0 上)

    app.all('*', ensureSecure); // at top of routing calls
    
    http.createServer(app).listen(80)
    https.createServer(sslOptions, app).listen(443)
    
    function ensureSecure(req, res, next){
      if(req.secure){
        // OK, continue
        return next();
      };
      // handle port numbers if you need non defaults
      // res.redirect('https://' + req.host + req.url); // express 3.x
      res.redirect('https://' + req.hostname + req.url); // express 4.x
    }
    

    【讨论】:

    • 对于任何使用 Heroku 的人来说,仅供参考,req.secure 将不起作用。在这里查看答案:stackoverflow.com/questions/32952085/…
    • req.host (express 3.x) 现在是 req.hostname (express 4.x)
    • Elastic Beanstalk 或 ELB 后面的任何其他 EC2 实例也是如此,ELB 代表服务器终止 HTTPS。
    • 截至 5/2017 w/ Express v 4.8.0:function ensureSecure(req, res, next){ if(req.headers['x-forwarded-proto'] === 'https'){ // OK, continue return next() }; res.redirect('https://' + req.headers.host) }
    • @PhilAndrews 使用 req.headers['x-forwarded-proto'] 的解决方案仅在快速服务器位于注入标头 x-forwarded-proto 的负载均衡器之后才有效
    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2019-07-17
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多