1
我在Heroku部署一個簡單的NodeJS服務器與SSL有效證書Heroku的連接關閉代碼= H13
var https = require('https');
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var app = express();
var cors = require('cors');
var credentials = {
key: fs.readFileSync('./cert/key.key'),
cert: fs.readFileSync('./cert/cert.crt'),
ca: fs.readFileSync('./cert/bundle.crt'),
requestCert: true,
rejectUnauthorized: false
};
var server = https.createServer(credentials, app);
var io = require('socket.io')(server);
app.use(cors());
app.use(bodyParser.json({limit: '12mb'}));
app.use(bodyParser.urlencoded({limit: '12mb', extended: true }));
io.on('connection', function(socket){
console.log(socket);
socket.on('authenticate', function(data){
console.log(data);
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log("server listen on", this.address());
});
server.on('clientError', function(err) {
console.log('ERROR', err);
});
問題是,當我啓動應用程序我接收到該錯誤
ERROR { Error: socket hang up
at TLSSocket.<anonymous> (_tls_wrap.js:820:25)
at emitOne (events.js:101:20)
at TLSSocket.emit (events.js:188:7)
at Socket._handle.close (net.js:492:12)
at Socket.g (events.js:286:16)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at TCP._handle.close [as _onclose] (net.js:492:12) code: 'ECONNRESET' }
當我試圖通過Chrome瀏覽器連接到我的服務器我在服務器端收到此錯誤
2017-01-05T15:03:43.465542+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/socket.io/?EIO=3&transport=polling&t=LblA3JZ" host=www.myapp.com request_id=51982ce9-99e3-4677-acb4-a0f14eb88999 fwd="95.251.90.218" dyno=web.1 connect=1ms service=2ms status=503 bytes=0
2017-01-05T15:03:43.460178+00:00 app[web.1]: ERROR Error: 140414443095936:error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request:../deps/openssl/openssl/ssl/s23_srvr.c:394:
這個錯誤在客戶端
XMLHttpRequest cannot load https://www.myapp.com/socket.io/?EIO=3&transport=polling&t=LblDK25. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.0.8:8100' is therefore not allowed access. The response had HTTP status code 503.
在第一時刻,我認爲這是socket.io但問題也仍然存在與正常休息的操作。 現在我認爲我是一個SSL問題。我與godaddy提供商創建了一個有效的證書,然後將其上傳到heroku併成功。事實上,如果我嘗試通過https連接連接到我的應用程序,證書是有效的。也許問題是當我嘗試上傳這些證書到我的nodejs app.someone可以幫助我嗎?在此先感謝
謝謝。這行得通!但我有些疑惑。我不使用heroku ssl端點(20美元的插件),但是從愛好計劃開始包含新的Heroku SSL服務。現在在我的服務器代碼中,我只使用一個http服務器,但在客戶端,我連接到'https://'。我會理解連接是否安全 –
您的應用程序和Heroku之間的連接是安全的,但Heroku會將未加密的數據從其負載平衡器發送到您的應用程序。也許你應該嘗試使用像express-sslify這樣的包來強制https傳入請求,但我不認爲這是最好的解決方案,因爲你的敏感數據在被重定向到https之前發送到http。我無法找到關於SSL如何在Heroku中工作的任何特定文檔。我想我們只需要信任Heroku:S也許你很冷,試着問Heroku支持更多的信息。 –
好的,無論如何非常感謝。但是,這一點非常重要 –