资讯动态

Tomcat 8.5.35 Linux 部署实战:从404到Manager页面全通

发布时间:2026/10/24 18:11:20 来源:尧图企业网站定制
简介本资源为Linux平台下Apache Tomcat 8.5.35官方发行版二进制包面向Java Web开发者、运维工程师及高校教学实践者用于快速搭建轻量级Servlet容器环境支撑Web应用开发、测试与部署。压缩包共645个文件涵盖236个HTML文档含官方帮助页与示例页面、100个class字节码文件、75个Java源码供调试参考、59个JSP示例模板、31个JAR依赖库、16个XML配置文件如server.xml、web.xml等核心配置以及startup.sh/shutdown.sh等9个Linux启动脚本完整呈现Tomcat标准目录结构与运行时组件。资源大小9.2MB解压即用无需编译。目前已有556人学习下载读者可直接获取包含Catalina容器、Jasper引擎、Coyote连接器及完整conf/bin/webapps/logs等关键目录的开箱即用环境便于深入理解Servlet生命周期、JSP编译机制、HTTPS配置方法及WAR自动部署流程。1. Tomcat 8.5.35 在 Linux 上不是“装完就能跑”而是“装错一个路径就 404 到怀疑人生”你手头刚下载好tomcat8-8.5.35.tar.gz解压、启动、浏览器敲http://localhost:8080——结果页面空白连经典的猫图标都不见。别急着重装这大概率不是你操作失误而是 Tomcat 8.5.35 这个生命周期已结束但仍在大量生产环境服役的 LTS 版本对 JDK 版本、用户权限、SELinux 策略、甚至$CATALINA_HOME路径里的空格都极其敏感。我见过太多人卡在「明明startup.sh显示 started却死活打不开管理页」最后发现是 JDK 11 悄悄替换了系统默认的 JDK 8或者/opt/tomcat目录被 systemd 服务单元文件硬编码了旧路径。这套环境不是给新手练手的玩具而是某高校实验室部署十年未大修的教务系统后台、某公司遗留 ERP 的 Web 容器、某跨平台系统中稳定扛住日均 20 万请求的 Java Web 基座。它不时髦但够稳不自动但可溯不宽容但有迹可循。本文只讲一件事用最贴近真实运维现场的方式把tomcat8-8.5.35.tar.gz在主流 Linux 发行版CentOS 7/8、Ubuntu 20.04/22.04上从零配到能进 Manager 页面、能部署 WAR、能查日志定位问题——每一步命令都带后果说明每个报错都对应可验证的修复动作。2. 下载、解压与基础目录结构别跳过 tar.gz 解压时的三个隐藏陷阱Tomcat 8.5.35 是 Apache 官方于 2018 年 11 月发布的版本属于 Tomcat 8.x 系列最后一个功能更新版后续仅发布安全补丁官方已归档至 archive.apache.org 。它不提供.deb或.rpm包纯tar.gz分发这意味着所有路径、权限、环境变量都得你亲手定义。跳过这步细节后面 90% 的 404、403、Permission denied 都源于此。2.1 下载源与校验为什么必须核对 SHA512虽然tomcat8-8.5.35.tar.gz名字明确但网络传输或镜像站缓存可能引入损坏。Apache 官方为每个发布包提供 SHA512 校验值这是防止“下载了个假包”的后悔药。# 进入临时工作目录避免污染 /root 或家目录 cd /tmp # 下载主包 对应的 SHA512 校验文件注意不是 .sha是 .sha512 curl -O https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz curl -O https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz.sha512 # 校验输出 OK 表示无误 sha512sum -c apache-tomcat-8.5.35.tar.gz.sha512提示如果提示sha512sum: apache-tomcat-8.5.35.tar.gz: No such file or directory说明文件名不匹配。官方包名是apache-tomcat-8.5.35.tar.gz不是tomcat8-8.5.35.tar.gz——后者多为国内镜像站或个人重命名务必以官网包名为准否则后续配置文档路径全错。2.2 解压位置选择为什么/opt/tomcat是运维共识Linux 系统中第三方独立软件非包管理器安装约定俗成放在/opt。Tomcat 不同于 Nginx 或 MySQL它不写系统级配置所有运行时数据都在自身目录下因此/opt/tomcat是最干净、最易备份、最不易被yum update或apt upgrade波及的位置。# 创建专用用户安全基线要求绝不以 root 启动 Tomcat sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat # 解压到 /opt并重命名为规范目录名去掉版本号便于后续升级 sudo tar xzvf apache-tomcat-8.5.35.tar.gz -C /opt/ sudo mv /opt/apache-tomcat-8.5.35 /opt/tomcat # 修正所有权tomcat 用户拥有全部组为 tomcat sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R ux /opt/tomcat/bin/逻辑说明-r创建系统用户UID 1000无登录 shell-m自动创建家目录虽设为/opt/tomcat但确保路径存在-U创建同名组chown -R tomcat:tomcat是关键——若遗漏startup.sh可能因无权读取conf/server.xml而静默失败chmod -R ux /opt/tomcat/bin/确保catalina.sh、startup.sh等脚本可执行某些发行版解压后权限为 644。2.3 目录结构速览哪些子目录你必须盯紧解压后/opt/tomcat结构如下精简核心目录作用运维关注点bin/启动/停止脚本、JVM 参数配置setenv.sh必须手动创建否则无法调优内存conf/主配置文件server.xml端口/Connector、tomcat-users.xml管理页账号、web.xml全局 Servlet 映射logs/运行日志catalina.out是标准输出重定向localhost.date.log记录应用级异常webapps/默认部署目录ROOT/对应http://host:port/manager/和host-manager/需显式启用work/JSP 编译缓存可清空重启后重建若磁盘满先清此目录注意temp/和lib/一般不动。temp/存放临时文件lib/是 Tomcat 自身依赖如servlet-api.jar切勿往里塞项目用的 JDBC 驱动——那是webapps/yourapp/WEB-INF/lib/的事。3. JDK 兼容性与环境变量配置Tomcat 8.5.35 只认 JDK 8不是“能跑就行”Tomcat 8.5.x 系列官方明确支持 JDK 7 和 JDK 8对 JDK 9 仅作有限兼容测试且 8.5.35 发布时 JDK 11 尚未 GA。现实中很多服务器已预装 OpenJDK 11 或 17若不显式指定JAVA_HOMETomcat 会调用系统默认 JDK导致启动失败或运行时UnsupportedClassVersionError。3.1 验证并安装 JDK 8以 Ubuntu 22.04 为例Ubuntu 22.04 默认源已移除 OpenJDK 8需添加旧版仓库# 添加 OpenJDK 8 仓库适用于 Ubuntu 20.04/22.04 sudo apt update sudo apt install -y software-properties-common sudo add-apt-repository -y ppa:openjdk-r/ppa sudo apt update # 安装 OpenJDK 8注意不是 default-jdk sudo apt install -y openjdk-8-jdk-headless # 验证安装 java -version # 输出应为openjdk version 1.8.0_382 ...CentOS 7/8 用户请使用# CentOS 7 sudo yum install -y java-1.8.0-openjdk-devel # CentOS 8需启用 PowerTools sudo dnf install -y java-1.8.0-openjdk-devel3.2 设置 JAVA_HOME为什么不能只靠update-alternativesupdate-alternatives --config java只影响java命令软链但 Tomcat 启动脚本catalina.sh优先读取JAVA_HOME环境变量其次才是PATH。若JAVA_HOME未设或指向错误路径startup.sh会尝试用which java查找结果可能调用到 JDK 11。# 查找 JDK 8 实际路径Ubuntu 示例 sudo update-java-alternatives -l | grep jdk8 # 输出类似java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64 # 永久设置 JAVA_HOME写入 tomcat 用户环境 echo export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-amd64 | sudo tee -a /opt/tomcat/.bashrc echo export PATH$JAVA_HOME/bin:$PATH | sudo tee -a /opt/tomcat/.bashrc # 切换到 tomcat 用户验证 sudo su - tomcat -c echo $JAVA_HOME # 必须输出/usr/lib/jvm/java-1.8.0-openjdk-amd643.3 创建 setenv.shJVM 内存与编码的生死线Tomcat 8.5.35 默认 JVM 参数极保守-Xms和-Xmx均为 128M生产环境必调且默认字符集为ISO-8859-1处理中文 URL 或表单会乱码。# 以 tomcat 用户身份创建 setenv.sh必须在 bin/ 下且不可加 .sh 后缀以外的扩展名 sudo -u tomcat tee /opt/tomcat/bin/setenv.sh EOF #!/bin/bash # JVM 内存设置根据服务器内存调整4G 机器建议 -Xms512m -Xmx1024m JAVA_OPTS-Xms512m -Xmx1024m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m # 强制 UTF-8 字符集解决中文乱码 JAVA_OPTS$JAVA_OPTS -Dfile.encodingUTF-8 # 关闭 RMI 以规避防火墙问题非集群环境推荐 JAVA_OPTS$JAVA_OPTS -Dcom.sun.management.jmxremotefalse EOF # 赋予执行权限 sudo chmod x /opt/tomcat/bin/setenv.sh参数说明-Xms512m -Xmx1024m初始堆 512MB最大堆 1024MB避免频繁 GC-XX:MetaspaceSize256mJDK 8 引入元空间替代永久代设初始大小防动态扩容开销-Dfile.encodingUTF-8此参数必须存在否则request.getParameter(中文)返回乱码-Dcom.sun.management.jmxremotefalse关闭 JMX 远程管理默认开启但监听 1000 端口常被防火墙拦截。4. 启动脚本与 systemd 服务配置让 Tomcat 成为真正的 Linux 系统服务手动执行./startup.sh只适合调试。生产环境必须通过systemd管理实现开机自启、崩溃自拉起、日志统一收集。Tomcat 8.5.35 自带daemon.sh但现代 Linuxsystemd 时代更推荐原生 service 文件。4.1 编写 tomcat.service 文件路径、用户、依赖三要素# 创建 systemd 服务文件 sudo tee /etc/systemd/system/tomcat.service EOF [Unit] DescriptionApache Tomcat Web Application Container Afternetwork.target [Service] Typeforking # 关键指定 tomcat 用户和组 Usertomcat Grouptomcat # 工作目录必须是 CATALINA_HOME WorkingDirectory/opt/tomcat # 启动前确保 JAVA_HOME 正确systemd 不读 .bashrc需显式声明 EnvironmentJAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-amd64 EnvironmentCATALINA_HOME/opt/tomcat EnvironmentCATALINA_BASE/opt/tomcat EnvironmentCATALINA_PID/opt/tomcat/temp/tomcat.pid # 启动命令调用 catalina.sh start不是 startup.sh ExecStart/opt/tomcat/bin/catalina.sh start ExecStop/opt/tomcat/bin/catalina.sh stop Restartalways RestartSec10 # 安全加固禁止 core dump限制内存 LimitCOREinfinity MemoryLimit2G [Install] WantedBymulti-user.target EOF逻辑说明TypeforkingTomcat 启动后主进程 fork 子进程并退出符合catalina.sh start行为Environment块必须显式声明因为 systemd 会清空用户环境CATALINA_PID指向temp/tomcat.pidcatalina.sh会自动写入进程 IDstop时读取MemoryLimit2G防止 Tomcat 内存泄漏拖垮整机CentOS 7 支持Ubuntu 需systemd229。4.2 启用并启动服务验证是否真正“活着”# 重载 systemd 配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable tomcat # 启动服务 sudo systemctl start tomcat # 检查状态重点看 Active: active (running) 和 Main PID sudo systemctl status tomcat -l # 查看实时日志CtrlC 退出 sudo journalctl -u tomcat -f常见成功日志特征INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [xxx] millisecondsINFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]若卡在Starting ProtocolHandler后无响应大概率是server.xml中Connector端口被占用或JAVA_HOME错误导致 JVM 启动失败。4.3 防火墙放行8080 端口不是“默认开放”的# CentOS 7/8 sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload # Ubuntuufw sudo ufw allow 8080 sudo ufw reload提示若服务器在云厂商如阿里云、腾讯云安全组规则必须额外放行 8080 端口防火墙只是第一道关。5. 管理界面启用与常见问题排查403/404 不是 Bug是配置没到位Tomcat 8.5.35 默认禁用 Manager 和 Host Manager 应用这是安全设计不是缺陷。想进http://localhost:8080/manager/html必须手动配置用户权限和访问控制。5.1 配置 tomcat-users.xml三步解锁管理页# 编辑用户配置文件注意是 conf/tomcat-users.xml不是 conf/web.xml sudo -u tomcat nano /opt/tomcat/conf/tomcat-users.xml在tomcat-users标签内添加以下内容替换掉注释掉的示例用户!-- 添加管理员用户 -- user usernameadmin passwordSecurePass123! rolesmanager-gui,manager-status,admin-gui,admin-script/角色说明manager-gui允许访问/manager/html图形界面manager-status查看服务器状态JVM、线程、连接池admin-gui访问/host-manager/html虚拟主机管理admin-script支持/host-manager/text接口脚本化部署。5.2 开放 Manager 应用的 IP 访问限制Tomcat 8.5.35 默认只允许127.0.0.1和::1访问 Manager远程登录需修改context.xml# 编辑 Manager 应用的上下文配置 sudo -u tomcat nano /opt/tomcat/webapps/manager/META-INF/context.xml找到Valve标签注释掉整段 IP 限制或修改allow属性!-- 注释掉这一整段 -- !-- Valve classNameorg.apache.catalina.valves.RemoteAddrValve allow127\.\d\.\d\.\d|::1|0:0:0:0:0:0:0:1 / -- !-- 或改为允许所有 IP仅限内网环境 -- Valve classNameorg.apache.catalina.valves.RemoteAddrValve allow.* /注意allow.*是正则表达式表示允许任意 IP。生产环境请严格限定内网段如allow192\.168\.1\.\d。5.3 常见问题排查血泪经验总结的 4 条高频翻车点现象 1startup.sh执行后立即返回ps aux | grep tomcat查无进程catalina.out为空原因JAVA_HOME未正确设置或指向了 JRE非 JDK目录导致catalina.sh找不到java命令。解决sudo -u tomcat bash -c echo $JAVA_HOME $JAVA_HOME/bin/java -version确认输出 JDK 8 版本。现象 2浏览器打开http://ip:8080显示 404但http://ip:8080/manager/html提示 403原因tomcat-users.xml中用户未分配manager-gui角色或context.xml的 IP 限制未放开。解决检查tomcat-users.xml是否有user标签且roles包含manager-gui检查manager/META-INF/context.xml是否注释了Valve。现象 3能进 Manager 页面但上传 WAR 包时报FAIL - Deploy Upload Failed原因webapps/目录权限不属于tomcat用户或temp/目录磁盘满。解决sudo chown -R tomcat:tomcat /opt/tomcat/webapps/ /opt/tomcat/temp/df -h /opt查磁盘。现象 4启动后catalina.out报SEVERE [main] org.apache.catalina.core.StandardServer.await Port 8005 required原因server.xml中Shutdown端口默认 8005被其他进程占用。解决sudo ss -tuln | grep :8005查占用进程kill -9 pid或修改server.xml中Server port8005为其他端口如 8006。6. 验证部署与日志诊断用一个 WAR 包走通完整流程装完不是终点验证才是。我们用 Tomcat 自带的examples应用已内置或一个极简 WAR 包走通「部署 → 访问 → 查日志 → 排错」闭环。6.1 部署自带 examples 应用快速验证容器健康度Tomcat 8.5.35 的webapps/examples目录默认存在但需确保其WEB-INF/web.xml中的 Servlet 映射有效# 检查 examples 是否已解压正常应为目录非 .war 文件 ls -ld /opt/tomcat/webapps/examples/ # 若是 examples.war 文件则需先删除再重启让 Tomcat 自动解压 sudo rm /opt/tomcat/webapps/examples.war sudo systemctl restart tomcat等待 10 秒后访问http://your-server-ip:8080/examples/servlets/应看到 Servlet 示例列表。点击任意链接如servlets/servlet/RequestInfoExample若显示请求信息页证明✅ Tomcat HTTP Connector 正常✅ JSP/Servlet 编译器工作✅webapps/目录读写权限正确。6.2 手动部署 WAR 包从打包到上线的最小可行路径假设你有一个hello-world.war可从 Spring Initializr 生成最简 Spring Boot 项目导出部署步骤# 复制 WAR 到 webappstomcat 用户必须有写权限 sudo -u tomcat cp /path/to/hello-world.war /opt/tomcat/webapps/ # Tomcat 会自动解压观察 logs/catalina.out # 或手动触发部署等效 sudo systemctl restart tomcat验证访问http://your-server-ip:8080/hello-world/WAR 包名决定 context path。若返回 404检查webapps/下是否生成hello-world/目录而非hello-world.war文件残留查logs/localhost.date.log看是否有Deploying web application directory日志若有java.lang.OutOfMemoryError: Metaspace说明setenv.sh中MetaspaceSize太小调大至512m。6.3 日志分层诊断法三类日志各司其职Tomcat 日志不是一锅炖要分层查日志文件何时查看典型线索logs/catalina.out启动失败、JVM 崩溃java.lang.OutOfMemoryError,Address already in use,Could not load classlogs/localhost.date.log应用启动失败、Servlet 初始化异常SEVERE [RMI TCP Connection(2)-127.0.0.1] ... Error configuring application listenerlogs/manager.date.logManager 页面操作失败FAIL - Application at context path [/myapp] could not be started实战技巧用tail -f logs/catalina.out监控启动过程部署 WAR 后立刻tail -f logs/localhost.*.log看应用级日志若页面空白但无报错检查浏览器开发者工具 Network 标签页看具体哪个资源 404常是 CSS/JS 路径错。从那以后我每次新装 Tomcat都强制走一遍sudo -u tomcat $JAVA_HOME/bin/java -version验 JDKsudo -u tomcat /opt/tomcat/bin/catalina.sh configtest语法检查sudo systemctl status tomcat服务状态curl -I http://127.0.0.1:8080HTTP 头响应sudo -u tomcat ls -l /opt/tomcat/webapps/部署目录快照。五步下来95% 的“启动了但打不开”问题当场定位。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑