• 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

  • 相关阅读:
    No.7 selenium学习之路之Alert弹窗
    SQLAlchemy
    flask之wtforms
    Django中的信号及其用法
    Flask进阶
    Flask入门
    Django知识点总结
    登录验证随机验证码的实现
    Django之session与分页
    Django之Form组件
  • 原文地址:https://www.cnblogs.com/sos-blue/p/9091520.html
Copyright © 2020-2023  润新知