凌峰创科服务平台

linux服务器tomcat配置

目录

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

环境准备

1 安装 JDK

Tomcat 是一个 Java Servlet 容器,因此必须先安装 Java Development Kit (JDK),推荐使用 OpenJDK 8 或更高版本。

linux服务器tomcat配置-图1
(图片来源网络,侵删)

检查是否已安装:

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 文件,在文件末尾添加:

linux服务器tomcat配置-图2
(图片来源网络,侵删)
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 目录,你会看到以下关键文件夹:

linux服务器tomcat配置-图3
(图片来源网络,侵删)
  • 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 &quot;%r&quot; %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 目录之外的独立应用,这种方式更灵活。

  1. 创建应用目录:

    sudo mkdir -p /opt/myapp
    # 将你的应用文件(如 index.html, WEB-INF/等)放入 /opt/myapp
    sudo chown -R tomcat:tomcat /opt/myapp
  2. 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/classesWEB-INF/lib 下的文件发生变化时,Tomcat 会自动重新加载应用。生产环境建议设为 false 以提高性能。
  3. 重启 Tomcat

访问地址: http://your_server_ip:8080/myapp

3 方式三:使用 host-manager 部署

Tomcat 自带了一个管理应用,允许通过 Web 界面部署和管理应用。

  1. 配置管理用户: 编辑 /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>
  2. 访问管理界面:

    • 启动 Tomcat。
    • 访问 http://your_server_ip:8080/manager/html
    • 使用上一步创建的用户名和密码登录。

安全配置

1 修改管理端口和密码

  • 修改 shutdown 端口和命令: 编辑 server.xml,修改 <Server> 标签的 portshutdown 属性。

    <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)进行管理,实现开机自启、状态检查等。

  1. 创建服务文件:

    sudo vi /etc/systemd/system/tomcat.service
  2. 粘贴以下内容:

    [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
  3. 重新加载 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
分享:
扫描分享到社交APP
上一篇
下一篇