文档章节

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

jack__0023
 jack__0023
发布于 2017/08/02 17:48
字数 529
阅读 1128
收藏 61

背景

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

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

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

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

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

解决方案一

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

解决方案二

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

备注:配置的位置为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的配置,与此篇博客无关
		}
	}
}

关于配置2的解释

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

举例: 比如说,我设置了10分钟,那么如果我10分钟内有通讯,或者10分钟内有做心跳的话,是可以保持连接不中断的,详细看个人需求 感谢评论区 @zigzagroad 的指正,希望可以帮到你们,如果有更好的方式,麻烦分享一下,谢谢

关于nginx相关配置的解释,可以看一下这个

地址:http://blog.csdn.net/liujiyong7/article/details/18228915

© 著作权归作者所有

共有 人打赏支持
jack__0023
粉丝 10
博文 11
码字总数 6000
作品 0
深圳
程序员
加载中

评论(9)

justqb
justqb
gfddgs
rocky_star
rocky_star
发心跳包就完了
jack__0023
jack__0023

引用来自“dy810810”的评论

心跳包才是维持websocke通道的解决办法,冒然设长各种timout时间,这种做法不合适。
你可以使用心跳包的,只要觉得合适就行,
归根结底也就是,在他再读的时间内有效的通信过就好
dy810810
dy810810
心跳包才是维持websocke通道的解决办法,冒然设长各种timout时间,这种做法不合适。
zigzagroad
zigzagroad

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
是的,看个人需求吧,可以考虑在一定影响范围内,针对你的需求进行设置。
不好意思,暂时我能想到的只有这个,如果有更好的方式,欢迎分享

机制就是这么设定的,估计应该跳脱不出这个框架,所以必然是要从业务中手动通讯一次了,如果长时间不通讯的话。
jack__0023
jack__0023

引用来自“zigzagroad”的评论

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
是的,看个人需求吧,可以考虑在一定影响范围内,针对你的需求进行设置。
不好意思,暂时我能想到的只有这个,如果有更好的方式,欢迎分享
zigzagroad
zigzagroad

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
jack__0023
jack__0023

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。
zigzagroad
zigzagroad
也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
WebSocket 是什么原理?为什么可以实现持久连接?

作者:腾讯云技术社区 众所周知,Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现。这种机制对于信息变化不是...

xiaogong1688
06/29
0
0
Spring消息之WebSocket

一、WebSocket简介 WebSocket 的定义?WebSocket是HTML5下一种全双工通信协议。在建立连接后,WebSocket服务器端和客户端都能主动的向对方发送和接收数据,就像Socket一样。 WebSocket 的由来...

jmcui
05/06
0
0
从HTML5 WebSocket到Socket.io

HTML5 WebSocket 作为新一代的web标准,HTML5为我们提供了很多有用的东西,比如canvas,本地存储(已经分离出去了),多媒体编程接口,当然还有我们的WebSocket。WebSocket是HTML5开始提供的...

Srtian
05/11
0
0
JavaScript 工作原理之五-深入理解 WebSockets 和带有 SSE 机制的HTTP/2 以及正确的使用姿势(译)

原文请查阅这里,略有改动,本文采用知识共享署名 3.0 中国大陆许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第五章。 现在,我们将会...

tristan
05/11
0
0
配置Nginx反向代理WebSocket,以代理noVNC为例

什么是Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并...

ngle
07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day60-20180818-流利阅读笔记-待学习

钉钉:工作的归工作,生活的…也归工作? 毛西 2018-08-18 1.今日导读 你用过“钉钉”么?被公司要求使用钉钉的感受是如何的呢?这款阿里巴巴旗下的移动办公社交平台在弯道超车微信、为许多企...

aibinxiao
42分钟前
6
0
Kubernetes的HTTPS和证书问题,汇总

通过Kubernetes建立服务网站,需要干的事情和HTTPS和证书问题,汇总如下: 建立Nginx服务器 搞服务器第一步,Ubuntu 18.04设置静态IP 安装Nginx服务。 Kubernetes的deployment使用 创建服务,...

openthings
57分钟前
2
0
php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
今天
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
今天
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部