웹호스팅 내에서 node.js 서버를 돌리기 위해 iptables에서 3000번을 열어주고

https://www.yougetsignal.com/tools/open-ports/
로 방화벽이 열려있는지 확인까지 다했습니다.

 

 

 

https://xetown.com/qna/70326

 

이 글에서는 ssl 인증때문에 문제가 되면 virtualHost를 추가하라는 말씀을 댓글로 해주신분이 계셔서

저희도 전부 ssl을 사용중이기 때문에 httpd.conf 파일에 include가 되는파일을 일일이 찾아

 


<VirtualHost *:80>
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ProxyPass / https://localhost:3000/
ProxyPassReverse / https://localhost:3000/
ProxyPass / ws://localhost:3000/
ProxyPassReverse / ws://localhost:3000/

</VirtualHost>
 

이렇게 추가도 해줬습니다.

service httpd restart로 두항목 전부 ok가 뜨는 것도 확인을 했습니다.

 

 

다음 실시간 애드온2/js/server.js 에서 서버를 만들어서 io를 실행시키라는 의미로

"----> " 해둔 곳만큼만 코드를 추가했습니다.(추가하기 전에도 에러는 같았습니다)

 

---->var app = require('express')();
---->var server = require('http').createServer(app);
---->// http server를 socket.io server로 upgrade한다
---->var io = require('socket.io')(server);
---->server.listen(3000, function() {
---->      console.log('Socket IO server listening on port 3000');
---->    });


// open the socket connection
io.set('origins', '//mywebsite.com:*');
// ex) io.set('origins', '//naver.com:*');

io.on('connection', function (socket) {
    //call back trigger to server
    socket.on('sendToServer',function(data){
        //send to client
        io.emit('sendToClient',data);
    });

});

 

 

그 다음 forever start /생략/실시간애드온/js/server.js를 실행한 다음

애드온 관리페이지에 Nitrous.io Preview URI : mywebsite.com:3000

 

이라고 입력을 해주었는데도 불구하고 여전히 작동도 안되고

개발자 콘솔에는 첨부한 사진과 같이 에러를 뿜습니다.

 

123.jpg

 

 

 

리눅스도 그렇고  node.js도 이번이 생판 처음이라 시간이 꽤 오래 걸리지만

그래도 하나씩 해보면서 배운다 생각하고 하는중인데

 

이 문제로 3일을 넘는 시간동안 제시간에 잠못자고 밥도 대충먹으며 정상적인 생활을 못하고 있습니다ㅋㅋㅋ

제가 이제 정상적인 생활을 할 수 있게 부디 도움을 주시길 바랍니다ㅠㅠ

 

ps. 펨코, 일베식 실시간 알림 기능이 정말 탐나는데 기본구조나 원리정도 설명 해주실분 찾습니다.

소스코드를 전부 달라고는 부탁할 생각이 전혀없으나 구성방법이나 xe내 흐름정도만이라도 가르쳐주신다면 정말 감사할 것 같습니다. 워낙 실력없는 초보라서 쇠 귀에 경읽기겠지만 제 힘으로 알아가며 꼭 만들어보고 싶습니다. 

  • profile

    기본적인 작동 구조를 이해하셔야 합니다. 문제의 본질은
    1. SSL을 사용하는 사이트에서 SSL을 사용하지 않는 포트로는 접속이 되지 않는다
    2. node.js에서 사용하는 3000번 포트는 SSL을 사용하지 않는다
    3. 따라서 SSL을 사용하는 아파치를 경유하여 접속하도록 설정해야 한다
    이렇습니다.

    SSL을 사용하지 않는 경우
    브라우저 → 서버의 3000번 포트에 직접 접속 가능

    SSL을 사용하는 경우
    브라우저 → 서버의 443번 포트(인증서가 설치된 아파치)에 접속 → 아파치에서 /socket.io/로 시작하는 주소만 따로 골라내어 3000번 포트로 프록시 연결

    따라서 브라우저 쪽의 에러화면에는 3000이라는 숫자 자체가 등장하면 안되고, 3000번 포트를 방화벽에서 열어줄 필요조차 없습니다. 3000번 포트는 SSL을 사용하지 않으므로 외부 접속 용도로는 전혀 쓸모가 없거든요. 아파치와 node.js 사이의 내부 통신에나 쓰는 포트입니다.

    아파치 쪽의 프록시 설정도 80번 포트에 VirtualHost를 임의로 추가하는 방식이라면 곤란합니다. 애초에 아파치를 경유하는 이유가 SSL이 필요해서이니까요. 443번 포트에 SSL 인증서가 제대로 설치된 기존의 VirtualHost에 몇몇 설정을 추가하는 방식으로 접근하셔야 합니다.

    node.js에서 사용하는 포트(3000번)과 실제 브라우저에서 접속하는 포트(443번)가 다르기 때문에 혼란이 있을 수 있지만, 반드시 아파치를 경유하여 node.js에 접속한다는 원리를 이해하시면 크게 어렵지 않습니다.

  • profile ?
    제가 원하던 명쾌한 답변 정말 감사합니다.

    역시 저는 뭔가 한참 벗어난 행동을 하고 있었군요.

    커피한잔마시고 다시 도전해봐야겠습니다 정말 감사합니다.