socketio连接失败,nginx返回502 connect() failed (111: Connection refused)

news/2024/11/30 18:53:18/

现象

  • 我们信控平台,需要实时展示信号灯灯态(红黄绿、倒计时等)

  • 当灯态变化时,前端信号机设备会通过socket协议将消息推送给我们的通信服务,通信服务将消息解析处理后,关联路口信息,再把信息通过socket广播推送给浏览器

  • 当用户访问平台时,打开首页,就一直会接收到灯态推送,再在界面上实时渲染,可以实时查看灯态

  • 平台更新部署后,发现界面上的倒计时没有了,查看了下数据,发现数据库里的数据是对的

  • F12打开开发者模式,筛选“socket.io”,发现消息接收502了(很难复现,没有当时的截图,截了个正常的)
    在这里插入图片描述

  • 查看nginx日志,发现报错如下(部分):

"GET /socket.io/ HTTP/1.1" 502 559 [error] 24#24: *1 connect() failed (111: Connection refused) while connecting to upstream
2023/06/26 13:50:12 [error] 24#24: *1839 connect() failed (111: Connection refused) while connecting to upstream, client: 172.16.1.96, server: 172.16.1.100, request: "GET /socket.io/?EIO=3&transport=polling&t=OZsGAi0 HTTP/1.1", upstream: "http://172.18.0.12:7754/socket.io/?EIO=3&transport=polling&t=OZsGAi0", host: "172.16.1.100", referrer: "http://172.16.1.100/main/live-view/map"

解决

  • 我们的nginx是使用docker部署的,docker-compose里配置如下:
  # nginx服务,静态文件访问和反向代理nginx:image: nginx:1.20.2container_name: nginxports:- 80:80 #信控前端depends_on:- gateway-app- data-center-appvolumes:- ./volumes/nginx-html:/usr/share/nginx/html- ./volumes/nginx-config:/etc/nginx/conf.d- /etc/localtime:/etc/localtimeenvironment:- TZ=Asia/Shanghairestart: always
  • 百度了一堆,没发现问题
  • 这个错误通常是因为Nginx无法连接到后端的upstream服务。可能的原因包括:
  1. upstream服务挂掉了或未启动
  2. 防火墙阻止了Nginx连接upstream服务
  3. upstream服务的IP地址或端口号配置错误
  4. upstream服务只监听了本地地址(如127.0.0.1),而Nginx尝试连接外部地址
  • 解决方法也主要是针对以上排查,主要排查了下网络,没发现问题
  1. 确认upstream服务是否正常运行,尝试手动连接upstream服务;
  2. 检查防火墙设置,确保允许Nginx连接upstream服务;
  3. 检查Nginx配置文件中upstream服务的IP地址或端口号是否正确;
  4. 如果upstream服务只监听了本地地址,需要使用IP转发或者配置upstream服务监听所有地址。
  • 试着把nginx 重启了一下,发现重启后恢复正常了
  • 这个是偶发现象,部署更新平台时偶尔会出现,但不是必现,很难重现。后续也观察了下,没有重启部署操作时,一直没出过此问题
  • 我发现偶尔出现的时候,是因为应该服务重新部署了,nginx没有重启,但是也有一起使用docker-compose up重启的,怀疑和启动顺序有关系
  • 后续改进了部署更新的脚本,部署其他服务结束时,重启一下nginx。然后部署完成后,再检查一下平台信号机状态是否已经上报,没有则重启一下服务器
  • 正常推送,日志如下:
172.16.1.96 - - [26/Jun/2023:13:51:33 +0800] "GET /socket.io/?EIO=3&transport=polling&t=OZsGUNW&sid=a8726ad4-a4f8-420f-8ffe-e27ff82c6a69 HTTP/1.1" 200 42 "http://172.16.1.100/main/live-view/map" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"

http://www.ppmy.cn/news/593968.html

相关文章

服务主机本地系统占cpu_如何通过“服务主机:本地系统(网络受限制)”解决CPU使用率过高的问题

服务主机本地系统占cpu On some Windows 10 PCs, the “Service Host: Local System (Network Restricted)” process group in the Task Manager can use a high amount of CPU, disk, and memory resources. Here’s how to fix it. 在某些Windows 10 PC上, 任务管理器中的“…

原生安卓解决WiFi网络受限以及修改NTP服务器

一. 解决网络受限 1. 通过ADB命令的方式 先删除默认的地址: adb shell settings delete global captive_portal_https_url adb shell settings delete global captive_portal_http_url再修改新的地址: adb shell settings put global captive_portal…

SNMP 计算机网络管理 实验3(二)SNMP协议工作原理验证与分析

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

【python报错】UnicodeEncodeError: ‘ascii‘ codec can‘t encode character ‘\u5b59‘ in position 18: ordinal

报错信息 UnicodeEncodeError: ascii codec cant encode character \u5b59 in position 18: ordinal not in range(128)报错是因为Python默认使用ASCII编码,无法处理非ASCII字符,例如中文字符。为了解决这个问题,可以尝试以下两种方法&#…

keil u5无法输入中文 输入汉字乱码

keil u5写代码时,无法输入汉字,显示乱码(如下图),参考相关文章,解决了 将默认的“ANSI”换成简体中文, 打开Configuration, 路径:Edit菜单,最后一个菜单。 设置完成后&a…

django Django解决中文显示\u5....

解决方案 解决中文乱码,代码如下所示。 return JsonResponse(datares, json_dumps_params{ensure_ascii: False})

在VS中调试cocker-compose启动容器时出现vs2017u5 exists, deleting

在VS中调试cocker-compose启动容器时出现vs2017u5 exists, deleting 环境 Visual Studio 2022 Docker version 20.10.17, build 100c701 问题分析 直接使用Visual Studio 2022调试Docker容器时需要安装两个包(包在漂亮国),默认情况下&…

RC-u5 树与二分图

时间限制 500 ms 内存限制 64 MB 题解 : 注意到 树本身就是二分图(一层为黑,一层为白…);现在需要加一条原先不存在的边使得还是一张二分图,只能在黑层和白层之间连一条边,还要减去原先存在的…