目录
- 环境准备
- 安装 JDK
- 创建专用用户
- Tomcat 安装与部署
- 下载并解压
- 目录结构解析
- 核心配置文件详解
server.xml: 核心服务器配置context.xml: 全局应用上下文配置web.xml: 全局 Servlet 和过滤器配置logging.properties: 日志配置
- 部署 Web 应用
- 部署方式一:直接放入
webapps目录 - 部署方式二:使用
context.xml部署(推荐) - 部署方式三:使用
host-manager部署
- 部署方式一:直接放入
- 安全配置
- 修改管理端口和密码
- 关闭 AJP 连接器
- 配置访问日志
- 设置文件权限
- 性能优化
- JVM 内存优化 (
catalina.sh) - 连接器优化 (
server.xml) - 禁用 HTTP/1.1 协议(可选)
- JVM 内存优化 (
- 服务化配置 (推荐)
- 使用
systemd管理 Tomcat 服务
- 使用
- 常用维护命令
- 启动、停止、重启
- 查看日志
- 查看进程
环境准备
1 安装 JDK
Tomcat 是一个 Java Servlet 容器,因此必须先安装 Java Development Kit (JDK),推荐使用 OpenJDK 8 或更高版本。

检查是否已安装:
java -version javac -version
如果已安装且版本符合要求,可跳过此步。
安装 OpenJDK 8 (以 CentOS 为例):
# 更新软件包列表 sudo yum update -y # 安装 OpenJDK 8 sudo yum install java-1.8.0-openjdk-devel -y
配置环境变量 (可选,但推荐):
编辑 /etc/profile 文件,在文件末尾添加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.x.x.b1.el7_9.x86_64 # 你的实际JAVA_HOME路径 export JRE_HOME=$JAVA_HOME/jre export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
然后执行 source /etc/profile 使配置生效。
2 创建专用用户
出于安全考虑,不要使用 root 用户运行 Tomcat,我们创建一个名为 tomcat 的用户并赋予其必要权限。
# 创建 tomcat 用户,并禁止其登录 sudo useradd -m -s /sbin/nologin tomcat # 创建一个用于存放 Tomcat 的目录,/opt/tomcat sudo mkdir /opt/tomcat # 将 /opt/tomcat 目录的所有权赋予 tomcat 用户 sudo chown -R tomcat:tomcat /opt/tomcat
Tomcat 安装与部署
1 下载并解压
从 Apache Tomcat 官网 下载最新的 Core 版本 (apache-tomcat-9.0.x.tar.gz)。
# 切换到 tomcat 用户 su - tomcat # 进入 /opt/tomcat 目录 cd /opt/tomcat # 下载 Tomcat (请替换为最新版本的链接) wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.x/bin/apache-tomcat-9.0.x.tar.gz # 解压 tar -zxvf apache-tomcat-9.0.x.tar.gz # 创建一个软链接,方便升级 ln -s apache-tomcat-9.0.x tomcat-current # 退出 tomcat 用户 exit
2 目录结构解析
进入 /opt/tomcat/tomcat-current 目录,你会看到以下关键文件夹:

bin/: 存放启动 (startup.sh)、停止 (shutdown.sh) 等脚本文件。conf/: 存放核心配置文件,如server.xml,web.xml,context.xml等。webapps/: 存放部署的 Web 应用程序,将 WAR 文件或解压后的目录放在这里,Tomcat 会自动部署。logs/: 存放 Tomcat 的日志文件 (catalina.out,localhost.xxxx.log等)。temp/: Tomcat 运行时产生的临时文件。work/: 存放 JSP 编译后产生的.class文件和其它工作文件。lib/: 存放 Tomcat 运行时依赖的 JAR 包,以及所有 Web 应用都可以共享的库。
核心配置文件详解
1 conf/server.xml
这是最重要的配置文件,定义了 Tomcat 的服务实例、连接器、引擎等。
<!-- 示例: /opt/tomcat/tomcat-current/conf/server.xml -->
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- 连接器: 负责监听和接收客户端请求 -->
<!-- HTTP/1.1 连接器 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- AJP/1.3 连接器: 通常用于与 Apache/Nginx 集成 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- 引擎: 处理所有连接器接收到的请求 -->
<Engine name="Catalina" defaultHost="localhost">
<!-- 主机: 定义一个虚拟主机 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 定义一个上下文,用于部署特定应用 -->
<Context path="/myapp" docBase="/opt/myapp" reloadable="true" />
<!-- 访问日志 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
关键配置项:
<Server port="8005" ...>: Tomcat 的关闭端口,执行./shutdown.sh时就是向这个端口发送SHUTDOWN命令。生产环境务必修改此密码。<Connector port="8080" ...>: Tomcat 监听的 HTTP 端口,这是用户访问应用的端口。<Connector port="8009" ...>: AJP 端口,用于与 Web 服务器(如 Nginx)集成。<Engine name="Catalina" ...>: Tomcat 的核心处理引擎。<Host name="localhost" ...>: 定义一个虚拟主机,appBase指定了 Web 应用的基础目录。<Context path="/myapp" ...>: 手动部署应用的关键配置。path是访问路径,docBase是应用的实际文件路径。<Valve ...>: 访问日志记录器,pattern定义了日志的格式。
2 conf/context.xml
全局应用上下文配置,影响所有部署在 Tomcat 中的应用。
<Context>
<!-- 默认配置 -->
<!--
<WatchedResource>WEB-INF/web.xml</WatchedResource>
-->
<Manager pathname="" />
</Context>
<Manager pathname="">: 定义会话管理器。pathname=""表示会话数据保存在内存中,如果需要配置会话持久化或集群,需要修改这里。
3 conf/web.xml
全局的 Servlet 和过滤器配置,位于 conf/web.xml 的配置会应用于所有 Web 应用。
**3.4 conf/logging.properties
控制日志的输出级别和位置。
# 示例: 控制台日志级别
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
# 控制台日志级别
.level = INFO
# Catalina 日志文件
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
部署 Web 应用
1 方式一:直接放入 webapps 目录
这是最简单的方式,将你的 Web 应用打包成 .war 文件,然后直接复制到 /opt/tomcat/tomcat-current/webapps/ 目录下,Tomcat 会自动解压并部署。
访问地址: http://your_server_ip:8080/your_app_name
2 方式二:使用 context.xml 部署(推荐)
对于部署在 webapps 目录之外的独立应用,这种方式更灵活。
-
创建应用目录:
sudo mkdir -p /opt/myapp # 将你的应用文件(如 index.html, WEB-INF/等)放入 /opt/myapp sudo chown -R tomcat:tomcat /opt/myapp
-
在
server.xml中添加<Context>: 编辑/opt/tomcat/tomcat-current/conf/server.xml,在<Host>标签内添加:<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/myapp" docBase="/opt/myapp" reloadable="true" /> </Host>path: 访问该应用的 URL 路径。docBase: 应用的根目录。reloadable="true: 当WEB-INF/classes或WEB-INF/lib下的文件发生变化时,Tomcat 会自动重新加载应用。生产环境建议设为false以提高性能。
-
重启 Tomcat。
访问地址: http://your_server_ip:8080/myapp
3 方式三:使用 host-manager 部署
Tomcat 自带了一个管理应用,允许通过 Web 界面部署和管理应用。
-
配置管理用户: 编辑
/opt/tomcat/tomcat-current/conf/tomcat-users.xml,添加一个具有manager-gui角色的用户。<tomcat-users> <role rolename="manager-gui"/> <user username="admin" password="your_secure_password" roles="manager-gui"/> </tomcat-users>
-
访问管理界面:
- 启动 Tomcat。
- 访问
http://your_server_ip:8080/manager/html。 - 使用上一步创建的用户名和密码登录。
安全配置
1 修改管理端口和密码
-
修改
shutdown端口和命令: 编辑server.xml,修改<Server>标签的port和shutdown属性。<Server port="8105" shutdown="MY_CUSTOM_SHUTDOWN_COMMAND">
-
修改
manager应用访问密码: 如上所述,在tomcat-users.xml中使用强密码。
2 关闭 AJP 连接器
如果你的服务器不使用 Nginx + Tomcat 的反向代理架构,为了安全,可以关闭 AJP 连接器,在 server.xml 中注释掉或删除 AJP Connector:
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
3 配置访问日志
如 server.xml 示例中所示,<Valve> 组件可以记录详细的访问日志,这对于安全审计和问题排查至关重要。
4 设置文件权限
确保 Tomcat 进程运行的用户(tomcat)对其目录有正确的读写权限。
# 推荐权限设置 sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R 750 /opt/tomcat/tomcat-current/conf sudo chmod -R 750 /opt/tomcat/tomcat-current/logs sudo chmod -R 755 /opt/tomcat/tomcat-current/webapps
性能优化
1 JVM 内存优化 (catalina.sh)
编辑 /opt/tomcat/tomcat-current/bin/catalina.sh 文件,在文件开头添加以下内容:
# Set JVM memory options export CATALINA_OPTS="-Xms2g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
-Xms: 初始堆内存大小。-Xmx: 最大堆内存大小。通常设置为服务器可用内存的 50%-80%。-XX:MetaspaceSize: 元空间初始大小。-XX:MaxMetaspaceSize: 元空间最大大小。
2 连接器优化 (server.xml)
优化 <Connector> 标签,提高并发处理能力。
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="800" minSpareThreads="100" maxConnections="10000"
acceptCount="1000" connectionTimeout="30000"
redirectPort="8443" />
maxThreads: 最大线程数,决定了 Tomcat 能同时处理多少个请求。minSpareThreads: 最小空闲线程数,Tomcat 启动时就创建这么多线程,随时准备接收请求。maxConnections: 最大连接数,当达到这个值后,新的请求将排队。acceptCount: 当所有线程都在忙时,队列中可以容纳的请求数量。
3 禁用 HTTP/1.1 协议(可选)
如果你的应用和客户端都支持,启用 HTTP/2 可以显著提升性能,在 Connector 中添加 executor 引用并启用 HTTP/2。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800" minSpareThreads="100"/>
<Connector port="8080" protocol="HTTP/1.1"
executor="tomcatThreadPool"
maxConnections="10000"
acceptCount="1000"
connectionTimeout="30000"
redirectPort="8443"
/>
服务化配置 (推荐)
使用 systemd 可以让 Tomcat 像 Linux 的其他服务一样(如 nginx, mysql)进行管理,实现开机自启、状态检查等。
-
创建服务文件:
sudo vi /etc/systemd/system/tomcat.service
-
粘贴以下内容:
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking # Tomcat 用户 User=tomcat Group=tomcat # Tomcat 安装路径 Environment="CATALINA_PID=/opt/tomcat/tomcat-current/temp/tomcat.pid" Environment="CATALINA_HOME=/opt/tomcat/tomcat-current" Environment="CATALINA_BASE=/opt/tomcat/tomcat-current" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M" Environment="JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom" # 启动和停止命令 ExecStart=/opt/tomcat/tomcat-current/bin/startup.sh ExecStop=/opt/tomcat/tomcat-current/bin/shutdown.sh # 重启策略 Restart=on-failure [Install] WantedBy=multi-user.target
-
重新加载 systemd 并启动服务:
# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Tomcat 服务 sudo systemctl start tomcat # 设置开机自启 sudo systemctl enable tomcat # 查看服务状态 sudo systemctl status tomcat
常用维护命令
启动、停止、重启
使用 systemd (推荐):
sudo systemctl start tomcat sudo systemctl stop tomcat sudo systemctl restart tomcat
手动启动 (不推荐用于生产):
su - tomcat cd /opt/tomcat/tomcat-current ./bin/startup.sh ./bin/shutdown.sh
查看日志
日志文件位于 /opt/tomcat/tomcat-current/logs/ 目录下。
catalina.out: Tomcat 启动和运行的标准输出/错误日志。localhost.xxxx.log: 访问本机应用的日志。manager.xxxx.log: manager 应用的日志。
# 实时查看 catalina.out tail -f /opt/tomcat/tomcat-current/logs/catalina.out # 查看最近的访问日志 tail -f /opt/tomcat/tomcat-current/logs/localhost_access_log.txt
查看进程
# 查看 Java 进程,确认 Tomcat 是否在运行 ps -ef | grep java # 使用 systemctl 查看服务状态 sudo systemctl status tomcat
