node.js - ExpressJS Node HTTPS 服务器上的 Heroku 错误 H13

标签 node.js ssl heroku https express

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

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')
  });
}

我还在 Heroku 上设置了 SSL Endpoint。在 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();
});

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

我对 https 的总体经验非常有限,所以我可能遗漏了一些明显的东西。

最佳答案

SSL 终止发生在 Heroku 的负载均衡器上;他们发送您的应用程序纯(非 SSL)流量,因此您的应用程序应该创建一个非 HTTPS 服务器。至于 https://mydomain.com 的页面运行了来自 http://mydomain.com 的不安全内容,请确保所有图像/脚本/等。您的页面使用的也是通过 https 协议(protocol)提供的。

关于node.js - ExpressJS Node HTTPS 服务器上的 Heroku 错误 H13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485880/

相关文章:

node.js - 如何卸载从 pkg (Mac OS X) 安装的 nodejs?

apache - 使用 https 将域重定向到另一个域时出错

docker - 使用 Mosquitto 客户端测试 VerneMQ 代理 TLS

ruby-on-rails - 如何生成 nokogumbo Gem 文件

node.js - 我如何告诉 heroku 我的 server.js 和 package.json 在一个文件夹中?

node.js - 处理从 nodejs 与 mongo db 的连接丢失

node.js - nodejs 服务器与 apache tomcat 服务器(App 服务器)有何不同?

ruby-on-rails - Heroku 正在为 Rails 5 应用程序提供旧 Assets

node.js - 如何连接 Angular2 + Webpack + Node + Express?

ubuntu - NginX:HTTPS 连接被拒绝