引言
Apache Tomcat 是一个开源的轻量级 Web 应用服务器,是 Java Servlet、JavaServer Pages (JSP)、Java Expression Language 和 Java WebSocket 技术的官方参考实现。是最广泛使用的 Java 应用服务器之一,Tomcat 以其轻量、免费、开源和稳定的特性,成为了开发和部署 Java Web 应用程序的首选平台。本文让您全面了解 Tomcat,从基础安装到高级调优。
第一部分:基础入门与安装

1. 核心概念
Servlet 容器: Tomcat 本质上是一个 Servlet 容器。它负责管理 Servlet 的生命周期,处理 HTTP 请求(Request)并返回响应(Response)。
组件架构: Tomcat 由一系列可配置的组件(Component)构成,如 Server, Service, Connector, Engine, Host, Context 等,理解这些组件是进行高级配置的基础。
目录结构: 安装后了解其目录结构至关重要:
bin/: 启动、关闭和其他脚本文件。
conf/: 配置文件(如 server.xml, web.xml)。
logs/: 日志文件(catalina.out, localhost.yyyy-mm-dd.log 等)。
webapps/: 存放 Web 应用程序的目录(WAR 包或解压后的文件夹)。
work/: Tomcat 运行时的工作目录,用于存放 JSP 编译后的 Servlet 类文件。
lib/: 存放 Tomcat 及所有 Web 应用共享的 JAR 文件。
2. 安装 Tomcat
Tomcat 依赖于 Java 环境,请确保先安装 JDK(推荐 JDK 8 或 11 等 LTS 版本)。
方法一:使用包管理器安装(Linux,如 Ubuntu)
# 更新包列表 sudo apt-get update # 安装 JDK sudo apt-get install openjdk-11-jdk # 安装 Tomcat sudo apt-get install tomcat9 # 查看状态 sudo systemctl status tomcat9
优点: 简单快捷,服务自动配置。
缺点: 版本可能不是最新,文件布局遵循系统标准。
方法二:手动安装(适用于所有操作系统)
1、从 Apache Tomcat 官网 下载所需的 .tar.gz(Linux/macOS)或 .zip(Windows)压缩包。
2、解压到目标目录(如 /opt/tomcat 或 C:\Program Files\tomcat)。
3、设置环境变量:
JAVA_HOME: 指向您的 JDK 安装目录。
CATALINA_HOME: 指向您的 Tomcat 解压目录。
启动与停止
手动安装:
# 启动$CATALINA_HOME/bin/startup.sh # Linux/macOS
%%CATALINA_HOME%%\bin\startup.bat # Windows
# 停止
$CATALINA_HOME/bin/shutdown.sh # Linux/macOS
%%CATALINA_HOME%%\bin\shutdown.bat # Windows
系统服务(Linux,适用于方法一):
sudo systemctl start tomcat9
sudo systemctl stop tomcat9
sudo systemctl restart tomcat9
安装完成后,访问 http://localhost:8080,就能看到 Tomcat 的默认欢迎页面。
第二部分:核心配置详解<br/>Tomcat 的配置主要集中在 $CATALINA_HOME/conf/ 目录下的几个文件中。<br/><br/>1. server.xml - 主配置文件<br/>这是最重要的配置文件,定义了 Tomcat 的核心组件。<br/>
修改服务端口/关闭端口:
<Server port="8005" shutdown="SHUTDOWN">
8005 是用于接收关闭命令的端口。SHUTDOWN 是命令字符串。出于安全考虑,可以修改此字符串或禁用此端口。
配置连接器(Connector): 这是处理 HTTP 请求的组件。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
acceptCount="100"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,text/javascript,application/json" />
port: 应用访问端口。
protocol: 协议,使用 org.apache.coyote.http11.Http11NioProtocol 以获得更好的性能(NIO)。
maxThreads: Tomcat 能创建来处理请求的最大线程数,默认 200。这是关键的性能调优参数。
minSpareThreads: 始终保持运行的最小空闲线程数。
acceptCount: 当所有可用线程都在忙碌时,传入连接请求的最大队列长度。队列满后,任何请求都将被拒绝。
enableLookups: 设为 false 禁止 DNS 查询,提升性能。
compression: 启用 GZIP 压缩,减少网络传输量。
配置 AJP 连接器: 用于与前端 HTTP 服务器(如 Apache HTTPD)集成,现在已不常用,出于安全考虑,生产环境建议注释掉或删除。
<!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> -->
配置引擎(Engine)和主机(Host):
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="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>
appBase: Web 应用的存放目录。
unpackWARs: 是否自动解压部署的 WAR 包。<br/>
autoDeploy: 是否自动部署放入 appBase 的应用。<br/>
Valve: 配置访问日志,pattern 定义了日志的格式。
2. web.xml - 默认应用部署描述符<br/>此文件为所有 Web 应用提供默认的配置。您可以在这里配置默认的 Servlet、MIME 类型、会话超时时间等。
<session-config>
<session-timeout>30</session-timeout> <!-- 会话超时时间(分钟) -->
</session-config>
3. context.xml - 上下文配置<br/>此文件的配置会应用于所有的 Web 应用。常用于配置数据库连接池(JNDI DataSource)、监控等。
<Context>
<!-- 示例:配置一个 MySQL JNDI DataSource -->
<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="your_username" password="your_password"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/your_database"/>
</Context>
在应用的 WEB-INF/web.xml 中引用此资源。<br/><br/>4. 用户管理:tomcat-users.xml<br/>此文件用于配置访问 Tomcat 管理界面(Manager App 和 Host Manager)的用户和角色。
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="supersecretpassword" roles="manager-gui,admin-gui"/>
</tomcat-users>
警告: 生产环境务必使用强密码,并考虑限制管理界面的访问 IP。第三部分:性能优化与安全加固
1. JVM 调优<br/>通过修改 $CATALINA_HOME/bin/setenv.sh(或 setenv.bat,如不存在则创建)文件来设置 JVM 参数。
- 内存设置: 这是最重要的调优。
# setenv.sh 示例
export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
- -Xms 和 -Xmx: 设置堆内存的初始大小和最大值。建议设置为相同值,以避免运行时动态调整带来的性能损耗。
- -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize: 设置元空间(Java 8+ 取代永久代)的大小。<br/>垃圾回收器选择: 对于需要低延迟的应用,可以考虑使用 G1GC。
#垃圾回收
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"</pre><p><br/></p><p>2. 连接器(Connector)调优</p><ul style="list-style-type: circle;" class=" list-paddingleft-2"><li><p>回顾 server.xml 中的 Connector 配置,根据压测结果调整以下参数:</p></li><li><p>maxThreads: 根据应用的 CPU 和 I/O 密集型程度调整,通常 200-800。 </p></li><li><p>acceptCount: 根据预期的流量峰值设置。</p></li><li><p>启用 NIO: protocol="org.apache.coyote.http11.Http11NioProtocol"。</p></li><li><p>禁用 DNS 查询: enableLookups="false"。</p></li></ul><p>3. 部署优化</p><ul style="list-style-type: disc;" class=" list-paddingleft-2"><li><p>关闭自动部署: 生产环境应将 autoDeploy 和 deployOnStartup 设置为 false,通过脚本手动部署,避免不必要的热部署带来的性能开销和安全风险。</p></li><li><p>清理 webapps 目录: 删除无用的默认应用(如 docs, examples, host-manager, manager),减少被攻击面。</p></li><li><p>使用 WAR 文件部署: 相比解压目录,WAR 文件更易于管理和回滚。</p></li></ul><p>4. 安全加固</p><p style="text-indent: 2em;">删除默认应用: 如上所述,移除 webapps/ 下不需要的应用。</p><p style="text-indent: 2em;">保护管理界面:</p><ul style="list-style-type: circle;" class=" list-paddingleft-2"><li><p style="text-indent: 0em;">在 tomcat-users.xml 中设置强密码。</p></li><li><p style="text-indent: 0em;">在 $CATALINA_HOME/webapps/manager/META-INF/context.xml 和 /host-manager/META-INF/context.xml 中,通过 Valve 限制访问 IP。<Valve className="org.apache.catalina.valves.RemoteAddrValve"以非特权用户运行: 绝对不要以 root 用户运行 Tomcat。创建一个专用的、权限受限的系统用户来运行 Tomcat。
allow="127.0.0.1|192.168.1.\d+" /> <!-- 只允许本地和特定内网IP -->useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat隐藏服务器信息: 修改 conf/server.xml 中的 Server 标签,添加 server 属性,隐藏版本信息。
chown -R tomcat: /opt/tomcat<Server port="8005" shutdown="SHUTDOWN" server="Unknown Server">启用 HTTPS: 使用 SSL/TLS 加密通信。您可以使用 Let's Encrypt 获取免费证书,并在 Connector 中配置。
本文最后更新时间 2025-10-01
文章链接地址:https://xzlo.blog/index.php/archives/69/
本站文章除注明[转载|引用|原文]出处外,均为本站原生内容,转载前请注明出处