Nginx Websocket 代理丢帧
Posted
技术标签:
【中文标题】Nginx Websocket 代理丢帧【英文标题】:Nginx Websocket proxy dropping frames 【发布时间】: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。
还有什么我应该尝试的吗?
【问题讨论】:
【参考方案1】:分析数据流后,Nginx 确实是在流式传输数据。不同之处在于 Nginx 将其缓冲成一个连续的流,其中来自浏览器的数据是碎片化的。
我使用的 websocket 实现需要修复。
【讨论】:
【参考方案2】:我注意到几个 websocket 实现的另一个错误是您需要使用“升级”而不是“升级”。
尝试改变 proxy_set_header 连接“升级”;
到
proxy_set_header 连接“升级”;
【讨论】:
以上是关于Nginx Websocket 代理丢帧的主要内容,如果未能解决你的问题,请参考以下文章
Node.js - 具有 WebSocket 代理和 SSL 支持的良好 WebServer?
websocket._exceptions.WebSocketProxyException:通过代理连接失败状态:503
websockets django nginx webssh