2013-07-13 61 views
9

我已經配置了我的SSL enpoint,並且我可以確認它正在工作。當我進入我的日誌,我看到以下內容:Heroku上的HTTPS Node.js應用程序

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

感謝您的反饋提前。如果需要,我可以提供更多細節。

------ SOLUTION(EDIT)-------

見我的回答如下。

+1

嗨安德魯,我知道這是事實很長一段時間,但你應該自己發佈解決方案作爲答案,並將其標記爲已接受! –

回答

7

我在這裏找到了答案: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偉大的工作沒有。祝你好運!

+0

很奇怪,所以當我配置SSL時,NodeJS代碼應該做什麼?我如何設置證書? –

+1

這是另一個令人困惑的部分。證書是通過Heroku提供的,而不是您的域名提供商(誰也會試圖出售您的證書)。 – AndrewJM

+0

哦,我不需要購買它們嗎? –

相關問題