【问题标题】:Nginx Websocket proxy dropping framesNginx Websocket 代理丢帧
【发布时间】:2014-04-24 16:01:22
【问题描述】:

可以直接连接到我的 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 和 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。

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

【问题讨论】:

    标签: nginx proxy websocket


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我注意到几个 websocket 实现的另一个错误是您需要使用“升级”而不是“升级”。

      尝试改变 proxy_set_header 连接“升级”;

      proxy_set_header 连接“升级”;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-09
        • 2023-03-11
        • 2017-10-25
        • 2019-06-26
        • 2019-02-04
        • 2020-01-25
        • 2018-10-12
        • 2020-02-27
        相关资源
        最近更新 更多