2017-12-24 17 views
1

포트 3000에서 실행되는 Socket.io 서버가 있고 로컬 서버와 웹 사이트를 실행할 때 로컬로 모든 것이 올바르게 작동합니다. 하지만 서버에 연결하면 클라이언트가 더 이상 연결할 수 없습니다.Socket.io 클라이언트가 연결되지 않습니다.

프로덕션 서버가 SSL을 통해 실행되므로 SSL을 통해 실행되도록 Socket.io 서버가 필요하다고 가정했습니다. 나는 이것을 다음과 같이 설정했다 :

var app = express(); 

var fs = require('fs'); 

var is_production = process.env.NODE_ENV === 'production'; 

if(is_production){ 
    var options = { 
     key: fs.readFileSync('/etc/letsencrypt/live/mywebsite.com/privkey.pem'), 
     cert: fs.readFileSync('/etc/letsencrypt/live/mywebsite.com/cert.pem'), 
     requestCert: true 
    }; 

    var server = require('https').createServer(options, app); 
}else{ 
    var server = require('http').createServer(app); 
} 

var io = require('socket.io')(server); 
server.listen(3000); 

이것은 여전히 ​​작동하지 않는다. Socket.io에 대한 많은 경험이 없기 때문에 도움을받을 수 있습니다. 또한 웹 서버에서 SSL 인증서를 설정하기 전에 모든 것이 잘 작동했음을 유의하십시오.

클라이언트가 ws://mywebsite.com:3000에 연결 중입니다. http://, https://wss://도 사용해 보았지만 아무 효과가 없습니다.

편집 : 나는 curl를 통해 요청을 시도하고 나는 다음과 같은 오류 얻을 : 나는 문제가 무엇인지 알아낼 수

curl: (35) gnutls_handshake() failed: The TLS connection was non-properly terminated. 

답변

0

를, 그래서 여기에 내가 무슨 짓을했는지.

Nginx는 동일한 서버에서 실행되므로 내 웹 사이트를 서비스 할 수 있습니다. Nginx를 구성하여 모든 SSL 연결을 포트 3000에 프록시하고 포트 8080에서 실행중인 node.js 서버로 전달할 수 있습니다. Nginx가 SSL을 처리하므로 node.js 서버에 추가 구성이 필요하지 않습니다.