2014-04-24 4 views
1

내 websocket 서버에 직접 연결 (Chrome 또는 Firefox). Nginx websocket 프록시를 통해 연결하면 프레임이 연결되지만 드랍됩니다. 여기에 JSON 메시지의 예입니다Nginx Websocket 프록시 드롭 프레임

<-- {"login" : { "username": "user", "password" : "pass"}} 
--> {"loginReply" : { "state": "ok"}} 
<-- {"someSetting1" : { "something": "something"}} 
<-- {"someSetting2" : { "something": "something"}} **DROPPED** 
<-- {"someSetting3" : { "something": "something"}} **DROPPED** 

그 마지막 세 메시지가 로그인 후 즉시 전송됩니다,하지만 마지막 두가 웹 소켓 서버로하지 않는 (~ 시간의 90 %). 후속 메시지는 아무 것도없는 것처럼 잘 작동합니다.

내가 Nginx에 1.4.7 & 1.5.13

location /websocket { 
      proxy_pass http://localhost:8001; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_read_timeout 86400; 
} 

내가 오프 proxy_buffering과에 시도를 시도했다.

내가 시도해야 할 것은 무엇입니까?

답변

1

데이터 스트림을 분석 한 후 Nginx가 실제로 데이터를 스트리밍합니다. 차이점은 Nginx가이를 브라우저에서 데이터가 파편화되어 하나의 연속 된 스트림으로 버퍼링한다는 것입니다.

내가 사용하고 있던 websocket 구현은 수정이 필요했습니다.

0

여러 가지 websocket 구현에서 한 가지 추가 오류는 "업그레이드"가 아니라 "업그레이드"를 사용해야한다는 것입니다.

변경 시도 proxy_set_header 연결 "업그레이드";

to

proxy_set_header 연결 "업그레이드";