그누보드 연동 Nodejs 실시간 채팅 SSL 적용 문의입니다. 채택완료

Copy
const port = 8081;

const app = require('express');
const fs = require('fs');
const path = require('path');
const http = require('http').Server(app);
const io = require('socket.io')(http);
const HTTPS = require('https');
try {
    const option = {
      ca: fs.readFileSync('/etc/nginx/ssl/fullchain.pem'),
      key: fs.readFileSync(path.resolve(process.cwd(), '/etc/nginx/ssl/privkey.pem'), 'utf8').toString(),
      cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/nginx/ssl/cert.pem'), 'utf8').toString(),
    };  
    HTTPS.createServer(option, app).listen(8082, () => {
      console.log(`[HTTPS] Nodejs Server is started on port 8082`);
    });
  } catch (error) {
    console.error('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
    console.warn(error);
  }
var mysql = require('mysql');
var mysql = mysql.createConnection({
    host: '127.0.0.1',
    user : 'xxxx',
    password : 'xxxx',
    insecureAuth: true,
    database: 'gnuboard'
});
mysql.connect();

http.listen(port, () => {
    console.log('서버가 실행되었습니다.');
});

 

위와 같이 작업하고

 

Copy
var chat = io.connect("wss://domain.com:8081/chat?userId="+userId);

 

위와 같이 접근하니 안되는군요 ㅠㅠ SSL 적용 안하면 잘 되는데, 적용하면 안되니 ㅠㅠ

 

8081 8082 둘다 열려있는데, 어떻게 작업해주는게 좋을까요?

답변 4개

채택된 답변
+20 포인트
var chat = io.connect("wss:https://domain.com:8081/chat?userId="+userId, { secure: true });

이렇게 앞에 https://, secure: true 시도해도 안되시나요??

https://www.it-swarm.dev/ko/ssl/nodejs-ssl%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-socketio/972298686/
로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

app.js 문제인 듯 합니다.

내일 다시 설치해보려구요 .. ㅠㅠ
이 문제는 아니었지만 채택합니다 ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

Copy
const port = 8080;

 

var fs = require('fs');

var privateKey = fs.readFileSync('/경로/privkey.pem')

var certificate = fs.readFileSync('/경로/fullchain.pem');

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

const app = require('express');

var https = require('https').Server(credentials,app);

const io = require('socket.io')(https);

var mysql = require('mysql');

var mysql = mysql.createConnection({

    host: 'db',

    user : '1234',

    password : '1234',

    insecureAuth: true,

    database: 'gnuboard'

});

mysql.connect();

 

https.listen(port, () => {

    console.log('서버가 실행되었습니다.');

});

 

이렇게 하니깐 잘 되네요! 선우님 감사합니다.!

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

인증서 경로는 절대경로 상대경로 다 잘됩니다.

그리고 도커의 node:alpine 도 됩니다!

댓글을 작성하려면 로그인이 필요합니다.

어려운 것을 하시네요

비슷한 것을 찾아보니

 

https://stackoverflow.com/questions/22453782/nodejs-http-and-https-over-same-port

 

참조하세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

넵.. 뭔가 한끗 차이인데.. 좀더 찾아보고 있습니다.

댓글을 작성하려면 로그인이 필요합니다.

Copy
const port = 8080;
 
var fs = require('fs');
var privateKey = fs.readFileSync('/경로/privkey.pem')
var certificate = fs.readFileSync('/경로/fullchain.pem');
var credentials = {key: privateKey, cert: certificate};
const app = require('express');
var https = require('https').Server(credentials,app);
const io = require('socket.io')(https);
var mysql = require('mysql');
var mysql = mysql.createConnection({
    host: 'db',
    user : '1234',
    password : '1234',
    insecureAuth: true,
    database: 'gnuboard'
});
mysql.connect();
 
https.listen(port, () => {
    console.log('서버가 실행되었습니다.');
});

 

이거예요!

 

잘 됩니다!

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

[code]
net::ERR_SSL_PROTOCOL_ERROR
[/code]

프로토콜 에러 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고