Nginx Websocket代理丢帧

时间:2014-04-24 16:01:23

标签: nginx proxy websocket

直接连接到我的websocket服务器(Chrome或Firefox)。通过Nginx websocket代理连接连接,但丢帧。以下是JSON消息的示例:

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

最后三条消息在登录后立即发送,但最后两条消息不会进入websocket服务器(约90%的时间)。后续消息,工作正常,好像什么都没有丢失。

我尝试过Nginx 1.4.7&amp; 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。

还有什么我应该尝试的吗?

2 个答案:

答案 0 :(得分:1)

在分析数据流之后,Nginx确实正在流式传输数据。区别在于Nginx将其缓冲为一个连续的流,其中来自浏览器的数据是碎片化的。

我正在使用的websocket实现需要修复。

答案 1 :(得分:0)

我注意到几个websocket实现的另一个错误是你需要使用&#34;升级&#34;而不是&#34;升级&#34;。

尝试改变 proxy_set_header连接&#34;升级&#34 ;;

proxy_set_header连接&#34;升级&#34 ;;