一尘不染

Heroku NodeJS http到https ssl强制重定向

node.js

我有一个应用程序在heroku上运行,并在带有https的节点上运行express。如何确定协议,以在Heroku上使用nodejs强制重定向到https?

我的应用程序只是一个简单的http服务器,它(尚未)意识到heroku正在向其发送https请求:

/* Heroku provides the port they want you on in this environment variable (hint: it's not 80) */
app.listen(process.env.PORT || 3000);

阅读 225

收藏
2020-07-07

共1个答案

一尘不染

答案是使用Heroku传递给它的代理thingamabob时使用的“ x-forwarded-proto”标头。(旁注:它们也传递了其他一些可能方便的x-
变量,请检查出来)。

我的代码:

/* At the top, with other redirect methods before other routes */
app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto']!='https')
    res.redirect('https://mypreferreddomain.com'+req.url)
  else
    next() /* Continue to other routes if we're not redirecting */
})

感谢Brandon,我只是在等待那6个小时的延迟,这让我无法回答自己的问题。

2020-07-07