2017-10-19 1 views
0

socket.io를 사용할 수 있도록 nodejs를 제공하는 하위 도메인을 설정합니다. 나는 https를 통해 페이지를 서비스하고 있으며 제대로 작동하려면 서버가 있습니다. 페이지가 게재됩니다. 그것은 문제가 아닙니다. 문제는 소켓을 클라이언트에 연결하려고 할 때입니다. 나는 이것을 잠시 동안 풀려고 노력해 왔으며, 여기있는 많은 유능한 사람들이 나를 도울 수 있다고 확신합니다. Nodejs 서버 https가 실행 중이지만 소켓이 연결되지 않음 (net :: ERR_CONNECTION_TIMED_OUT)

내 사이트 https://reward.cshive.com

오류 메시지입니다 내가 얻을 :

Error message

클라이언트 측

var socket = io.connect('https://reward.cshive.com:3000'); 

서버 측

const https = require('https'); 
var fs = require('fs'); 
const options = { 
    key: fs.readFileSync('/etc/letsencrypt/live/reward.cshive.com/privkey.pem'), 
    cert: fs.readFileSync('/etc/letsencrypt/live/reward.cshive.com/cert.pem') 
}; 
var app = https.createServer(options, (req, res) => { 
    fs.readFile(__dirname + '/served.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     console.log('Error loading page'); 
     return res.end('Error loading page'); 

    } 
    console.log('--Connection'); 
    res.writeHead(200); 
    res.end(data); 
    }); 
}) 



var server = app.listen(3000, function(err) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log("Listening on port 3000"); 
    } 
}); 
var io = require('socket.io').listen(server); 
+0

'페이지가 게재되었습니다'라고 말하면 어떤 페이지를 의미합니까? 처음에는 코드 (serve.html 파일의)에서 언급 한 페이지를 의미한다고 가정했지만 액세스 할 수있는 것 같지 않습니다. 포트 3000에서 어떤 응답도 얻을 수 없으므로 프록시 나 방화벽 문제에서부터 서버가 실행되지 않는 간단한 작업까지있을 수 있습니다. – skirtle

+0

죄송합니다. 더 명확히해야합니다. 내 말은 노드가 serve.h 파일을 제공한다는 것입니다. 나는 "노드 server.js"를하지 않을 때 nginx로부터 "502 bad gateway"를 얻었 기 때문에 이것을 알고있다. 내가 사이트에서 사용할 수있는 위치 블록에있는 포트 3000을 통해 요청을 허용하도록 proxy_pass를 설정했습니다. 내가 도움이된다면 학교에서 돌아올 때 설정을 추가 할 것입니다. 그러나 방화벽으로 무엇을 의미합니까? 어느 것? –

+1

나는 그것을 직접 시도하지는 않았지만 이것은 포트 3000에서 노드를 세계에 직접 노출하려고 시도하는 것보다 nginx를 통해 모든 것을 프록시하는 것이 유용 할 것 같다. https://gist.github.com/uorat/10b15a32f3ffa3f240662b9b0fefe706 – skirtle

답변

0

, 경로가 /socket.io-client/이었다 나를 change.For 수 Socket.IO에하는 서버 섹션에서 넣어 당신의

에서이 작업을 시도

location /socket.io-client/ { 
      proxy_pass http://node_server; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_redirect off; 

      proxy_buffers 8 32k; 
      proxy_buffer_size 64k; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
     } 

그리고 이

upstream node_server { 
    server 127.0.0.1:8080; 
    keepalive 15; 
} 

또한이

할 0

var socket = io.connect(); 호스트를 지정하지 않아도됩니다

+0

감사합니다. 문제 해결에 꼭 필요한 것은 아닙니다. 하지만 확실히 수정의 주요 부분이었다 –

+0

내가 sgin 관련 모든 물건을 처리하고 노드 js 그것을 무료 수 있도록 nginx하자 것이 좋습니다 것입니다. 접근 방식으로 볼 때 양쪽 노드 js와 nginx 모두에서 ssl을 끝내는 것을 보게됩니다. nginx도 그렇게 할 수 있습니다. –

+0

글쎄, 나는 nodejs에 http 서버를 만들려고했다. 그러나 브라우저는 안전하지 않은 것으로 표시되어 자원로드를 거부합니다. –

관련 문제