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 生成)

相关推荐
张小姐的猫4 小时前
【基于 WebSocket 的多用户网页五子棋】—— 项目结构设计与实用工具类模块
网络·websocket·网络协议
Z21-X5 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
进击的荆棘6 小时前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
瑞雪兆丰年兮7 小时前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
那明眸似水8 小时前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
小南家的青蛙9 小时前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
知已难寻19 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
新*1 天前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
Alluxio1 天前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
Sayai1 天前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher