美文网首页
小程序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