美文网首页
小程序WebSocket通过F5无法转发问题解决

小程序WebSocket通过F5无法转发问题解决

作者: JamesLiJing | 来源:发表于2018-07-30 16:24 被阅读0次

本项目实现通过小程序实现语音通知功能,测试环境使用nginx转发一切正常。

业务架构:

公网请求到总行F5----转发到分行F5----分发到接入前置NGINX----分发到语音服务器

问题描述:

        1. Websocket通道建立成功

         2. 客户端不能WebSocket消息转发到服务器。

    3. 服务器能够WebSocket消息转发到客户端。

分析及解决过程

        问题出现首先就是查看日志,通道wss://xxx.com/voice/websocket可以正常建立,客户端发送消息到服务端进行绑定时发送失败。首先想到是nginx问题,检查nginx配置参数:

map $http_upgrade $connection_upgrade {

        default upgrade;

        ''      close;

    }

location /websocket {

          proxy_pass http://192.168.10.191:7016/;

          proxy_http_version 1.1;

          proxy_set_header Upgrade $http_upgrade;

          proxy_set_header Connection "upgrade";

        }

参数正常。

第一步:

过滤掉总F5,分行F5进行测试,一切正常。

问题原因总行F5 或者分行F5转发导致不能收发消息。

第二步:

过滤掉总行F5,程序直连分行F5转发到nginx接入前置测试,

问题重现,说明分行F5配置有问题。

初步分析引起问题的原因:

       Websocket 使用http协议来完成部分握手,这个http报文中有包含"Upgrade:websocket",这是要告诉服务器"我要切换协议"。服务器接收后,回复一个http报文,告诉客户端"OK,我已经切换到websocket协议了"。到此一切正常,客户端发送商户标识到服务端进行绑定,服务端没有收到websocket消息,F5没有识别到websocket协议转发。

解决方案:

1.Log in to the BIG-IP Configuration utility.

2.Navigate to Local Traffic > iRules.

3.Click Create.

4.Give your new iRule a name and enter the following iRule in the Definition field:

     when HTTP_REQUEST {

       if { [string tolower [HTTP::header Upgrade]] contains "websocket" }{

          HTTP::disable

        }

      }

5.Click Finished.

6.Assign the iRule to the virtual server

最后连接F5测试,一切OK

相关文章

网友评论

      本文标题:小程序WebSocket通过F5无法转发问题解决

      本文链接:https://www.haomeiwen.com/subject/uxpfvftx.html