千家信息网

nginx代理socket.io服务的坑怎么解决

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"nginx代理socket.io服务的坑怎么解决",在日常操作中,相信很多人在nginx代理socket.io服务的坑怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2025年12月02日nginx代理socket.io服务的坑怎么解决

这篇文章主要介绍"nginx代理socket.io服务的坑怎么解决",在日常操作中,相信很多人在nginx代理socket.io服务的坑怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"nginx代理socket.io服务的坑怎么解决"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

nginx代理了两台socket.io服务器。socket.io的工作模式是polling升级到websocket

现象

通过nginx请求服务时,出现了大量的400错误,有时候能升级到websocket,有时候会一直报错。但是直接通过 ip+端口 访问时,100%能成功。

分析

sid

sid是我们这个问题的关键。在初始创建连接时(polling模式就是在模拟一个长连接),客户端会发起这样的请求:

https://***/?eio=3&transport=polling&t=1540820717277-0

服务端收到后会创建一个对象,绑定在这个连接上,同时返回一个sid(session id),来标记这个会话。会话指什么呢,会话是一连串的交互,这些交互之间是有联系的,在我们这个场景下就是,下一次的http请求到来,我需要找到之前绑定在理论上的长连接(这里还没有websocket,所以是理论上的)上的那个对象。我们知道http请求是无状态的,每个请求之间独立,所以socket.io引入了sid来做这件事。服务端收到请求后会生成一个sid,看下response:

复制代码 代码如下:

{"sid":"eogal3frqlptoalp5est","upgrades":["websocket"],"pinginterval":8000,"pingtimeout":10000}

之后每次请求都需要带上这个sid,建立websocket请求的连接也不例外。所以说,sid是polling,以及polling升级到websocket的关键。这之后的请求类似于:

https://***/?eio=3&transport=polling&t=1540820717314-1&sid=eogal3frqlptoalp5estorwss://***/?eio=3&transport=websocket&t=1540820717314-1&sid=eogal3frqlptoalp5est

那么问题来了,如果请求是带上的sid不是服务端生成的会怎样呢?服务端会不认识,给你返回一个400,并告诉你

invalid sid

我们遇到的便是这个问题,nginx默认的负载均衡策略是轮询,所以请求有可能会打到不是生成这个sid的机器上去,这时候我们就会收到一个400,如果运气好,可能也会打到原来的机器上,运气更好一点,甚至能坚持到websocket连接建立。

解决

这里提出两种方案

  1. nginx的负载均衡采用ip_hash,这样能保证一个客户端的请求都走到一台服务器上

  2. 不使用polling模式,只使用websocket

这两种方案各有利弊。第二种显而易见,不支持websocket的古老浏览器和客户端将没法工作。第一种的问题隐藏得比较深,试想,如果你增减了机器会怎样,这时候ip_hash策略的模将变化,之前的连接将全部失效,而对于微服务,扩缩容是很频繁的操作(特别是产品处于发展期),这种有损的扩缩容很大概率是不能接受的。

到此,关于"nginx代理socket.io服务的坑怎么解决"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

服务 代理 问题 学习 客户 机器 模式 理论 升级 生成 均衡 之间 代码 关键 客户端 对象 就是 方案 更多 有时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发技术总监绩效考核 软件开发背景说明 山西中小学生网络安全教育平台 山东恒来源网络技术有限公司 数据库安全级别有什么 戴尔服务器续保 花神(南京)互联网科技有限公司 刺激战场为什么出现服务器繁忙 潜江好的软件开发公司 吃鸡战场模拟器怎么换服务器 服务器设置无线网卡 搭建服务器管理用户机 优企excel系统有数据库吗 pg数据库获得当前时间 x58高性能服务器 太和县网络安全费用 数据库查询设计中如何设主键 大数据好些还是网络技术好些 越南网络安全新法生效 天津企航网络技术有限公司推广 中宏保险 软件开发 小学生网络安全宣传教育资料 软件开发的工作前景 江阴一站式软件开发销售 红河新华互联网科技有限公司 网络安全板块行情什么时候开启 玉林市网络安全办主任 飞行线路记录软件开发 南昌纯真软件开发 关于网络安全的顺口溜五六句
0