ExpressJS节点HTTPS服务器上的Heroku错误H13

hia*_*ttp 2 ssl https heroku node.js express

我正在尝试在我的Node.js服务器(Expressjs框架)上实现HTTPS.我有我签名的证书和密钥,以及用于测试/开发的自签名证书/密钥:

if(process.env.NODE_ENV == 'production'){
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/nopass_server.key'),
    cert: fs.readFileSync('./ssl/server.crt')
  });
} else {
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/self_signed/nopass_server.key'),
    cert: fs.readFileSync('./ssl/self_signed/server.crt')
  });
}
Run Code Online (Sandbox Code Playgroud)

我还在Heroku上设置了SSL端点.一切正常localhost,Endpoint似乎工作正常,但是当我在生产中运行应用程序(在Heroku上)时,我得到一个H13应用程序错误.有趣的是(或者不是)如果我告诉express创建一个HTTP服务器:var app = module.exports = express.createServer()它可以工作,但Chrome会抱怨the page at https://mydomain.com ran insecure content from http://mydomain.com.

我不能/不应该在快递中为生产创建HTTPS服务器吗?如果我应该,有什么额外的东西我需要让它在Heroku上工作(例如,我相信它设置正确的端口var port = process.env.PORT)?如果没有,如果没有运行https服务器,我怎么能提供"安全"内容,以便浏览器不会抱怨?

我正在使用以下内容来处理任何非https请求:

app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto'] != 'https'){
    res.redirect('https://mydomain.com'+req.url);
  } else next();
});
Run Code Online (Sandbox Code Playgroud)

目前它位于我的其他路线上方,这可能是问题/应该在其他地方吗?

我对https的一般经验非常有限,所以我可能会遗漏一些明显的东西.

Mic*_*ley 7

SSL终止发生在Heroku的负载平衡器上; 他们发送您的应用简单(非SSL)流量,因此您的应用应该创建一个非HTTPS服务器.至于the page at https://mydomain.com ran insecure content from http://mydomain.com,确保所有图像/脚本/等.您的页面正在使用也通过https协议提供.