【问题标题】:HTTPS Node.js application on HerokuHeroku 上的 HTTPS Node.js 应用程序
【发布时间】:2013-07-11 23:27:21
【问题描述】:

我已经配置了我的 SSL 端点,我可以确认它正在工作。当我进入我的日志时,我看到以下内容:

Jul 13 08:14:10 support-dash app/web.1:  Express server listening on port 17621 
Jul 13 08:14:10 support-dash heroku/web.1:  Stopping all processes with SIGTERM 
Jul 13 08:14:11 support-dash heroku/web.1:  State changed from starting to up 
Jul 13 08:14:13 support-dash heroku/web.1:  Process exited with status 143 
Jul 13 08:15:48 support-dash heroku/router:  at=error code=H12 desc="Request timeout" method=GET path=/ host=app.supportdash.com fwd="68.63.87.85" dyno=web.1 connect=2ms service=30000ms status=503 bytes=0 
Jul 13 08:16:18 support-dash heroku/router:  at=error code=H12 desc="Request timeout" method=GET path=/favicon.ico host=app.supportdash.com fwd="68.63.87.85" dyno=web.1 connect=2ms service=30007ms status=503 bytes=0 

我试图追踪有关退出代码 143 的一些信息,以及为什么所有进程都被停止。查看以下服务器文件:

var http = require('http');
var https = require('https');
var fs = require('fs');
var express = require("express");

var app = express();

app.set('port', process.env.PORT || 3000);
app.use(express.logger());

app.get('/', function(request, response) {
  response.send('Hello World 2!');
});

var privateKey = fs.readFileSync(__dirname + '/ssl/server.key').toString();
var certificate = fs.readFileSync(__dirname + '/ssl/gandiSSL.pem').toString();

var options = {
  key: privateKey,
  cert: certificate
};

https.createServer(options, app).listen(process.env.PORT, function () {
  console.log("Express server listening on port " + app.get('port'));
});

提前感谢您的反馈。如果需要,我可以提供更多详细信息。

-----解决方案(编辑)-------

请看下面我的回答。

【问题讨论】:

  • 嘿安德鲁,我知道这已经过去了很长时间,但您应该自己发布解决方案作为答案并将其标记为已接受!

标签: node.js heroku


【解决方案1】:

我在这里找到了答案:Heroku Error H13 on ExpressJS Node HTTPS Server

“SSL 终止发生在 Heroku 的负载均衡器上;它们向您的应用发送纯(非 SSL)流量,因此您的应用应该创建一个非 HTTPS 服务器。”

然后我将文件更改为:

var http = require('http');
var express = require("express");

var app = express();

app.set('port', process.env.PORT || 3000);
app.use(express.logger());

app.get('/', function(request, response) {
  console.log('[support dash] processing get request')
  response.send('Hello World 2!');
});

app.listen(process.env.PORT, function () {
  console.log('***** exp listening on port: ' + process.env.PORT);
});

现在一切都在 https 上运行良好。祝你好运!

【讨论】:

  • 很奇怪,所以当我配置 SSL 时,不应该对 NodeJS 代码做任何事情?如何设置证书?
  • 这是另一个令人困惑的部分。证书是通过 Heroku 提供的,而不是您的域名提供商(他们也会尝试向您出售证书)。
  • 哦,那我不用买吗?
  • 不 :) 你确实需要每月向 Heroku 支付 25 美元。
  • 您也可以使用 heroku cli 手动将证书添加到 heroku,如下所示: ``` heroku certs:add ```
猜你喜欢
  • 2016-07-19
  • 2014-09-27
  • 2013-12-20
  • 1970-01-01
  • 2014-07-09
  • 2019-05-15
  • 2013-07-29
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多