• Nginx代理webSocket经常中断的解决方案, 如何保持长连接


    背景

    这天气够热的,要处理的事情也够多的。。。。
    
    • 1
    • 2

    想看解决的,直接 ctrl+f搜索关键字‘配置点’

    开始前交代(想看原因的看这个,个人观点,不代表正确)

    解说:今天用nginx反代通讯项目,发现平均1分钟左右,就会出现webSocket连接中断,然后查看了一下,是nginx出现的问题。

    原因是: nginx等待你 第一次通讯和第二次通讯的时间差超过了它设定的最大等待时间,简单来说就是,超时,所以就啪的一声断了,开始上解决步骤。

    解决方案一

     其实只要配置nginx.conf的对应localhost里面的这几个参数就好
    
    • 1
    • 2

    1. proxy_connect_timeout;
    2. proxy_read_timeout;
    3. proxy_send_timeout;

    解决方案二

    发心跳包,原理就是在有效地再读时间内进行通讯,重新刷新再读时间
    
    • 1
    • 2

    备注:配置的位置为localhost,给出简略地址

     http {
        server {
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://webscoket; 
                proxy_http_version 1.1; 
                proxy_connect_timeout 4s; #配置点1
                proxy_read_timeout 60s; #配置点2,如果没效,可以考虑这个时间配置长一点
                proxy_send_timeout 12s; #配置点3
                proxy_set_header Upgrade $http_upgrade; #这是webSocket的配置,与此篇博客无关
                proxy_set_header Connection "Upgrade"; #这是webSocket的配置,与此篇博客无关
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    关于配置2的解释

    备注:这个是服务器对你等待最大的时间,也就是说,当你webSocket使用nginx转发的时候,用上面的配置2来说,如果60秒内没有通讯,依然是会断开的,所以,你可以按照你的需求来设定

    举例:
    比如说,我设置了10分钟,那么如果我10分钟内有通讯,或者10分钟内有做心跳的话,是可以保持连接不中断的,详细看个人需求

    http://nginx.org/en/docs/http/websocket.html

  • 相关阅读:
    IE8中li添加float属性,中英数字混合BUG
    jQuery ajax get与post后台交互中的奥秘
    BZOJ 4816 数字表格
    BZOJ 1598 牛跑步
    BZOJ 4077 Messenger
    相关分析 BZOJ 4821
    Crash的数字表格 BZOJ 2154 / jzptab BZOJ 2693
    回文串 BZOJ 3676
    古代猪文 BZOJ 1951
    树上的路径 BZOJ 3784
  • 原文地址:https://www.cnblogs.com/sos-blue/p/9091520.html
Copyright © 2020-2023  润新知