nginx代理webSocket链接,webSocket频繁断开重连方式
一、场景
1、使用nginx代理webSocket链接,消息发送和接收都是正常的,但webSocket链接会频繁断开重连
2、如果不使用nginx代理则一切正常
3、程序没有做webSocket心跳处理
- 如下图:

二、nginx代理配置
upstream cloud_ass {
#ip_hash;
server 192.168.1.233:8087;
server 192.168.1.243:8087;
}
server {
listen 8600;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~* /FS_WEB_ASS/* {
proxy_pass http://cloud_ass;
# WebScoket Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
break;
}
}三、原因
使用nginx代理webSocket链接,客户端和服务器握手成功后
如果在60s时间内没有数据交互,连接就会自动断开
四、解决
方法1:
在nginx配置proxy_read_timeout时长,最终配置如下
upstream cloud_ass {
#ip_hash;
server 192.168.1.233:8087;
server 192.168.1.243:8087;
}
server {
listen 8600;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~* /FS_WEB_ASS/* {
proxy_pass http://cloud_ass;
# WebScoket Support
proxy_http_version 1.1;
# webscoekt超时时间,如果没有做心跳之类的动作需要配置,否则webSocket会频繁断开重连
proxy_read_timeout 700s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
break;
}
}以上方式只能在设置的时间段内保持链接
方法2:
在客户端添加心跳机制
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
nginx 504 Gateway Time-out错误解决方法
我们经常会发现大量的nginx服务器访问时会提示nginx 504 Gateway Time-out错误了,下面我来总结了一些解决办法,有需要了解的同学可进入参考2014-11-11
nginx中使用nginx-http-concat模块合并静态资源文件
这篇文章主要介绍了nginx中使用nginx-http-concat模块合并静态资源文件,用以加速网站的CSS、JS等静态资源载入速度,需要的朋友可以参考下2014-06-06
宝塔里nginx自动停止的解决方法(检测脚本实现每分钟检测并自动启用)
nginx突然停止的原因有多种,这里不列举,可以排查具体原因,这里主要为大家分享nginx服务的检测脚本,达到自动启用的实现2025-02-02
解决nginx启动失败(bind() to 0.0.0.0:80 failed,An attempt was
这篇文章主要介绍了解决nginx启动失败问题(bind() to 0.0.0.0:80 failed,An attempt was made to access a socket in ...),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-05-05


最新评论