Nginx + Socket.io + 프록시

Nginx + Socket.io + 프록시

여러 기사를 읽은 후에도 여전히 nginx 프록시를 통해 내 소켓.io 통신이 작동하지 않습니다.

nginx구성은 다음과 같습니다.

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

location ~* \.io {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
}

node.js내 Express 서버가 연결된 방법은 다음과 같습니다 .

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);

내 로컬 개발 컴퓨터에서는 모든 것이 잘 작동하는 것 같습니다. onConnection 로그 메시지가 표시되고 모든 통신도 잘 작동합니다.

그러나 프로덕션에서는 브라우저가 유효한 응답을 모두 받았지만 onConnection 로그가 표시되지 않고 소켓을 통한 통신이 작동하지 않습니다.

Chrome 네트워크 탭 요청(전체 크기로 이미지를 열려면 클릭)

Chrome 네트워크 탭 요청

답변1

프로덕션 서버의 방화벽에 의해 포트 3000이 차단되었을 수 있습니다. 로컬 개발 컴퓨터에서 다음 명령을 실행하여 열려 있는지 확인할 수 있습니다.

telnet <ip-address-of-your-production-server> 3000

그러면 프로덕션 서버에서 포트 3000에 대한 연결을 열려고 시도합니다. 시간 초과되거나 거부되면 포트가 열리지 않습니다.

관련 정보