2017-01-05 4 views
1

=コードを閉じHerokuの接続は、私は、SSLの有効な証明書を使用してHerokuの上で簡単なnodejsサーバーを展開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' } 

とき、私私は、サーバー側でこのエラー を受けた私のサーバーにクロムで接続しよう

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だったが、問題は、通常のREST操作でも存続します。 今私は私がSSLの問題だと思う。私はgodaddyプロバイダとの有効な証明書を作成し、私はそれを成功とherokuにアップロードします。実際に私はhttps接続を介して自分のアプリケーションに接続しようとすると、証明書が有効です。多分問題は、私がこの証明書を私のnodejsにアップロードしようとしているときです。誰かが私を助けることができますか?事前に感謝します

答えて

2

HTTPSの代わりにHTTPサーバーを使用する必要があります。 SSL終了はHerokuのロードバランサで発生します。彼らはあなたのアプリのプレーンな(非SSL)トラフィックを送信するので、あなたのアプリはHTTPS以外のサーバーを作成する必要があります。

HTTPS + SSL on Heroku - Node + Express

+0

ありがとうございます。それは動作します!しかし、私はいくつかの疑問を持っています。私はheroku sslエンドポイント(20 $のプラグイン)を使用していませんが、新しいHeroku SSLサービスthaはホビープランから始まります。今私のサーバーコードでは、私はHTTPサーバーだけを使用しますが、クライアント側では、私は 'https:// 'に接続します。接続が安全かどうかわかります –

+0

アプリとHerokuとの接続は安全ですが、Herokuは非暗号化データをロードバランサからアプリに送信します。たぶん、express-sslifyのようなパッケージを使用して、着信要求に対してhttpsを強制することを試みるべきですが、httpsにリダイレクトされる前に、あなたの分かりやすいデータがhttpに送信されるため、これが最善の解決策ではないと思います。私は、HerokuでSSLがどのように動作するかについての特定のドキュメントを見つけることができませんでした。私たちは単にHerokuを信頼しなければならないと思う:Sあなたは冷静な試みをしてHerokuのサポートを求めてください。 –

+0

大丈夫、いずれにしても大変感謝します。はい、この点は本当に重要です –

関連する問題