Apache Tomcat 全面指南:从安装配置到性能调优

引言

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

第一部分:基础入门与安装

eb294f1be53cf7cbdd2a35b8.png

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 &quot;%%r&quot; %%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&nbsp;-XX:+UseG1GC&nbsp;-XX:MaxGCPauseMillis=200&quot;</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。&nbsp;</p></li><li><p>acceptCount: 根据预期的流量峰值设置。</p></li><li><p>启用 NIO: protocol=&quot;org.apache.coyote.http11.Http11NioProtocol&quot;。</p></li><li><p>禁用 DNS 查询: enableLookups=&quot;false&quot;。</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"
     allow="127.0.0.1|192.168.1.\d+" /> <!-- 只允许本地和特定内网IP -->
以非特权用户运行: 绝对不要以 root 用户运行 Tomcat。创建一个专用的、权限受限的系统用户来运行 Tomcat。
useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
chown -R tomcat: /opt/tomcat
隐藏服务器信息: 修改 conf/server.xml 中的 Server 标签,添加 server 属性,隐藏版本信息。
<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/
本站文章除注明[转载|引用|原文]出处外,均为本站原生内容,转载前请注明出处

留言