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

本项目实现通过小程序实现语音通知功能,测试环境使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,709评论 1 92
  • 一、内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket...
    Calvin李阅读 7,224评论 2 10
  • 1、铺垫营造“假”的预期 2、妙用反转效果 小张爱买彩票在部门里人尽皆知,他每天午饭后雷打不动都要跑去写字楼对面的...
    Joe小糖阅读 2,586评论 0 0
  • 第一张和第三张虚化了 第二张是对称,,但是曝光太强了, 灯光太强了 调了可长时间不知怎么办 前期不够 后期来凑( ...
    还有回忆很伤感阅读 1,365评论 1 1
  • 坚持写作是一件比较快乐的事情,昨天开始正式写日记,今天继续写,感觉到很爽,想想之前逼着自己写是多么的无知。从...
    只是想写阅读 2,405评论 0 0