2

클래식로드 밸런서 (Elastic Beanstalk) 뒤에 AWS로 호스팅되고 socket.io 서버까지 Nginx를 통해 내부적으로 프록시 처리되는 Laravel/Vue.JS 앱이 있습니다. Nginx에서 SSL이 종료되었습니다. 지금 모드가 제대로 작동 긴 폴링AWS EB : 웹 소켓 핸드 셰이크 중 오류 : 예기치 않은 응답 코드 : 400

location /socket.io { 
    proxy_pass   http://127.0.0.1:6001; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade   $http_upgrade; 
    proxy_set_header Connection  "upgrade"; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

하지만 업그레이드를 시작하는 데 실패 :

은의 nginx의 설정입니다 WSS '에

웹 소켓 연결을 : // 예 ? .COM/socket.io/EIO = 3 & 전송 = 웹 소켓 & SID = HmDFtq-aj1WgfGUyAAAJ '실패 : 웹 소켓 핸드 셰이크 중에 오류 : 예기치 않은 응답 코드 : 400

,451,515,

P.S 크롬의 난 단지 이상한 메시지를 볼 수 있습니다 Frames 탭 : (Opcode -1)

사람이 성공적으로 socket.io AWS 탄성 콩 줄기 환경에서 작업을 가지고있다? 방금이 문제를 다루는 데 2 ​​주일을 낭비했고, 어떤 제안이나 아이디어에 대해서도 매우 감사 할 것입니다. 감사!

업데이트. 나는 자세한 로깅을 설정하고 여기에 Nginx에 내 변수 :

$host example.com 
$proxy_add_x_forwarded_for 134.xxx.xxx.xxx 
$http_upgrade - 
$remote_addr 172.31.10.208 
$remote_user - 
$server_name _ 
$upstream_addr 127.0.0.1:6001 
$request GET /socket.io/?EIO=3&transport=polling&t=Lw26sYn&sid=6L5iHma-GJOeE3JQAAAX HTTP/1.1 
$upstream_response_time 24.658 msec 
$request_time 24.658 

어쩌면 누군가가 내가 어떤 조언을 부탁드립니다 잘못이 값의 일부를 찾을 수 있습니다.

+0

'proxy_set_header Host $ host;를 제거하고 –

+0

@TarunLalwani를 테스트하면 작동하지 않습니다. –

+0

'6001' 소켓 서버 로그에서 무엇을 볼 수 있습니까? –

답변

4

ELB는 HTTP/HTTP 수신기 또는 TCP/SSL 수신기를 사용합니까? 웹 소켓은 후자의 프로토콜 유형에서만 작동합니다. 청취자를 TCP로 변경하면 제대로 작동합니다.

또는 CLI 또는 API를 사용하여 환경을 구축 한 경우 ALB가 웹 소켓도 지원하므로 클래식로드 밸런서 (ELB) 대신 응용 프로그램로드 밸런서 (ALB)를 사용하여 ElasticBeanstalk 응용 프로그램을 다시 작성할 수 있습니다. 이 옵션은 웹 콘솔을 통해 사용할 수 없습니다.

+0

고맙습니다. 나는 그것을 시도하고 곧 돌아올 것입니다. 전에 시도한 것 같지만 다시 시도 할 것입니다. –

+0

멋지다, 작동하는 것처럼 보이지만 여전히 인스턴스 중 하나에서 400 오류가 있습니다 (두 개가 있음). 귀하의 방법은 여러 인스턴스에서 작동합니까? –

+0

예,하지만 ELB에서 "sticky sessions 사용"또는 "cross zone load balancing 사용 안 함"중 하나를 선택해야합니다. 목표는 HTTP와 웹 소켓 요청이 동일한 인스턴스로 이동하도록하는 것입니다. 나는 그것이 작동하는 것을 증명할 수있는 테스트 케이스 셋업을 가지고 있지 않지만, 만약 그렇다면 대답을 업데이트 할 것임을 알려주세요. –