CentOS 7 环境下 Tomcat 8.5 升级至 9.0.123 操作总结

一、 升级背景

  • 目标:修复 Tomcat 8.5 存在的认证绕过高危漏洞(CVE-2026-101296)。

  • 环境:CentOS 7.5,JDK 1.8,多实例部署(涉及 3100、9888、9666、8888、5200 等多个端口)。

  • 结论 :由于 Tomcat 8.5 已停止维护(EOL),无官方补丁,直接替换部署 Tomcat 9.0.123 是最佳方案。

二、 前期准备与磁盘避坑

  1. 停服 :进入旧 Tomcat bin 目录执行 ./shutdown.sh,并用 ps -ef | grep tomcat 确认进程已退出。

  2. 磁盘排查 :使用 df -h 检查空间。发现 /home 分区占用高达 98%(/home/mydata 占用 38G)。

  3. 调整部署策略 :为避免磁盘爆满,将新版 Tomcat 及备份文件统一放到根目录 /opt 下(根目录有 19G 可用空间)。

三、 备份与部署新版本

  1. 精简备份(防空间不足) :

    使用 tar 排除无用临时文件进行打包备份,并输出到 /opt:

    bash

    复制

    下载

    复制代码
    cd /home/nbacheng
    tar -zcvf /opt/tomcat-jeecg-3100-backup.tar.gz \
    --exclude='tomcat-jeecg-3100/logs' \
    --exclude='tomcat-jeecg-3100/work' \
    --exclude='tomcat-jeecg-3100/temp' \
    tomcat-jeecg-3100
  2. 解压并赋权:

    bash

    复制

    下载

    复制代码
    sudo tar -zxvf /opt/apache-tomcat-9.0.123.tar.gz -C /opt/
    sudo mv /opt/apache-tomcat-9.0.123 /opt/tomcat-jeecg-9
    # 必须赋予运行用户完全权限,否则启动报错
    sudo chown -R nbacheng:nbacheng /opt/tomcat-jeecg-9

四、 核心配置迁移(server.xml 排雷清单)

千万不要直接覆盖旧配置文件,而是以 Tomcat 9 自带为基础,将业务配置(端口、Host 等)迁移过去,并重点修正以下 6 个兼容性问题:

  1. 修复拼写错误 :maxTreads 必须改为 maxThreads(旧配置少了一个 h)。

  2. 删除废弃属性 :Tomcat 9 已彻底移除 maxProcessors 和 minProcessors,保留会报 Warning。

  3. 开启线程池 :旧配置的 <Connector> 引用了 executor="tomcatThreadPool",但 <Executor> 被注释掉了,导致启动失败。必须取消 <Executor> 的注释并配置具体参数。

  4. 修正压缩类型拼写 :compressableMimeType 必须改为 compressibleMimeType(把 a 改成 i)。

  5. AJP 安全限制 :Tomcat 9 要求 AJP 必须带密钥,否则启动报错。在内网或反代场景下,需给 AJP <Connector> 添加 secretRequired="false"。

  6. 取消 APR 监听器 :若系统未安装 APR 库,需注释掉 AprLifecycleListener,防止日志报错。

五、 应用与参数迁移

  1. 迁移代码 :将旧版 webapps 下的业务包(ROOT 或 *.war)拷入新版 webapps 中。切勿拷贝 Tomcat 9 自带的 docs 和 examples,以减少安全风险。

  2. 迁移环境变量 :若旧版 bin 目录下有 setenv.sh(配置了 JVM 堆内存等参数),直接复制到新版 bin 目录下。

六、 启动验证与收尾

  1. 启动测试:

    bash

    复制

    下载

    复制代码
    cd /opt/tomcat-jeecg-9/bin
    ./startup.sh
    tail -f ../logs/catalina.out
  2. 验证 :看到 Server startup in xxx ms 且无严重报错,通过浏览器访问对应端口验证业务功能。

  3. 清理旧版 :确认新服务运行正常后,彻底停掉旧服务 。对旧目录执行改名或删除(如 mv tomcat-jeecg-3100 tomcat-jeecg-3100.old),防止日后误启动导致漏洞复发。

  4. 更新 Systemd(可选) :如果使用了 systemctl 管理服务,需修改 /etc/systemd/system/tomcat.service 中的路径,并执行 systemctl daemon-reload。

💡 经验沉淀

  • 多实例升级 :此环境包含多个 Tomcat 实例,只需针对每个实例的 server.xml 按上述 6 点排雷,并修改对应的 HTTP 端口、AJP 端口和 Server 端口即可复用此流程。

  • 权限陷阱 :在 Linux 下迁移服务,最容易忽略的就是新目录的 chown 权限(属主、属组),遇到启动报错第一时间检查 ls -l。

  • 磁盘陷阱 :备份前务必看 df -h,大文件备份尽量使用 tar 排除 logs、work 等垃圾目录。


记录人:nbacheng | 时间:2026-10-23 | 适用场景:Tomcat 8.5.x -> 9.0.123 跨版本安全升级

本回答由 AI 生成,内容仅供参考,请仔细甄别

相关推荐
爱和冰阔落1 小时前
【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器
linux·运维·服务器·网络
maochongsandai1101 小时前
Centos上运行docker应用命令汇总
linux·docker·centos
一只QAQ1 小时前
python语法学习
linux·python·学习
by209992 小时前
Linux 软件安装与 Vim 编辑
linux·经验分享·vim
CQU_JIAKE2 小时前
10.28【A】
linux·运维·网络
爱和冰阔落2 小时前
【Linux网络】Socket 编程前要搞懂什么?从 IP、端口到字节序与 sockaddr,一次理清网络通信基础
linux·运维·网络·tcp/ip
晚风叙码2 小时前
Linux 进程概念(上):从冯诺依曼到进程调度
linux·运维·计算机外设
邪修king2 小时前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
坤坤子吖2 小时前
Linux网络编程基础:从 MAC 到 IP,理解网络数据是怎么传输的
linux·网络·笔记·学习