JumpServer4\.10\.16离线部署\+外部Nginx反向代理 解决30分钟空闲断开WebSocket超时(延长10天)

JumpServer4.10.16离线部署+外部Nginx反向代理 解决30分钟空闲断开WebSocket超时(延长10天)

一、问题现象

生产环境 JumpServer 4.10.16 离线包部署,使用外部独立Nginx 反向代理访问,Web终端连接服务器后,空闲30分钟自动断开,报错如下:

空闲时间超过30分钟,断开连接,websocket 已关闭

业务需求:将终端空闲超时从默认30分钟,延长至10天,保障运维长连接不中断。

二、当前部署架构(核心)

本次为标准企业生产架构:外部独立Nginx反向代理 + JumpServer离线容器部署,和纯内部Nginx架构故障点完全不同。

访问链路:用户浏览器 → 外部独立Nginx代理服务器 → JumpServer4.10.16离线服务 → 业务资产服务器

  • JumpServer部署方式:官方离线包解压部署,非纯docker-compose

  • 部署路径:/data/jumpserver/jumpserver-ce-v4.10.16-x86_64

  • 配置生效路径:/opt/jumpserver/config/(离线包固定生效目录)

  • 反向代理:独立外置Nginx(非JumpServer容器内置Nginx)

三、根因分析(为什么固定30分钟断开)

该问题不是SSH服务超时,是多层WebSocket长连接超时限制叠加导致:

  1. 外部Nginx核心原因 :Nginx默认 proxy_read_timeout=30m,刚好匹配30分钟断开,强制关闭WebSocket连接

  2. JumpServer程序限制:系统默认终端空闲最大30分钟,程序主动踢除会话

  3. WebSocket协议特性:空闲无报文传输,多层代理无心跳保活,连接被强制回收

解决方案:四层联动修改(外部Nginx + JumpServer配置文件 + Web后台参数 + 资产SSH保活),彻底延长至10天无超时。

四、正式解决方案(10天超时配置)

10天对应秒数:864000s

1、修改【外部独立Nginx】反向代理配置(最关键步骤)

外置Nginx是30分钟断开的核心元凶,必须全局放开长连接超时,适配WebSocket协议。

编辑Nginx配置文件:

bash 复制代码
vi /etc/nginx/conf.d/jumpserver.conf

替换为以下完整配置(仅需修改后端JumpServer宿主机IP):

nginx 复制代码
server {
    listen 80;
    server_name jms.xxx.com;  # 替换为你的域名

    client_max_body_size 4G;

    # 全局长连接超时设置为10天 864000秒
    proxy_connect_timeout 864000s;
    proxy_send_timeout    864000s;
    proxy_read_timeout     864000s;
    send_timeout           864000s;

    location / {
        # 替换为你的 JumpServer 服务器内网IP
        proxy_pass http://192.168.x.x;

        # WebSocket长连接必须配置参数
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 关闭缓存,避免长连接中断
        proxy_buffering off;
        proxy_request_buffering off;
    }
}

校验并重启Nginx生效:

bash 复制代码
nginx -t
systemctl restart nginx

2、修改JumpServer核心配置文件(config.txt)

离线包部署固定配置路径:/opt/jumpserver/config/config.txt

bash 复制代码
vi /opt/jumpserver/config/config.txt

追加/覆盖以下所有参数(统一10天超时+心跳保活):

ini 复制代码
# 登录会话有效期10天
SESSION_COOKIE_AGE=864000
SESSION_EXPIRE_AT_BROWSER_CLOSE=false

# WebSocket连接超时10天
WEBSOCKET_TIMEOUT=864000

# 终端最大空闲时间10天
TERMINAL_MAX_IDLE_TIME=864000

# 30秒心跳保活,防止中间设备掐断连接
TERMINAL_HEARTBEAT_INTERVAL=30
CLIENT_ALIVE_INTERVAL=30

重启JumpServer服务生效:

bash 复制代码
cd /data/jumpserver/jumpserver-ce-v4.10.16-x86_64
./jmsctl.sh restart

3、修改JumpServer Web后台会话参数

登录JumpServer后台,依次点击:系统设置 → 安全设置 → 会话安全

修改两项核心参数:

  • 连接最大空闲时间(分) :改为 14400(10天)

  • 会话连接最大时间(时) :改为240(10天)

点击【提交】,新打开的终端连接立即生效

4、优化资产服务器SSH保活配置(兜底加固)

登录被管理的Linux资产,修改ssh配置,防止底层SSH连接断开:

bash 复制代码
vi /etc/ssh/sshd_config

添加如下配置:

ini 复制代码
ClientAliveInterval 30
ClientAliveCountMax 9999

重启ssh服务:

bash 复制代码
systemctl restart sshd

五、补充说明(关键避坑)

  1. 无需修改容器内部Nginx:本次使用外部独立Nginx,容器内置Nginx不对外提供服务,无需改动

  2. 不支持0永久超时:JumpServer官方禁止关闭超时,10天为生产最优长效配置

  3. 必须新开终端测试:修改配置后,历史旧连接依旧失效,需新建终端验证

六、效果验证

配置全部生效后,保持终端空闲超过30分钟,不再报错:

空闲时间超过30分钟,断开连接,websocket 已关闭

长连接可稳定保持10天,完美解决运维长会话断开问题。

(注:文档部分内容可能由 AI 生成)

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
ping某11 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql