凌峰创科服务平台

如何在服务器上正确配置Tomcat?

核心概念

在开始之前,我们需要明确几个角色:

如何在服务器上正确配置Tomcat?-图1
(图片来源网络,侵删)
  • JDK (Java Development Kit): Tomcat 是一个用 Java 编写的应用,所以它必须依赖 Java 运行环境,你需要安装 JDK。
  • Tomcat: 本身是一个 Web 容器,它负责运行你的 Java Web 应用(.war 文件)。
  • Web Server (如 Nginx/Apache): 这是一个可选但强烈推荐的角色,Tomcat 自带的 HTTP 连接器性能有限,且功能不如专业的 Web 服务器强大,我们会用 Nginx 或 Apache 作为前端,接收所有用户请求,然后将动态请求(如 .jsp, .do)转发给 Tomcat,而直接处理静态资源(如 css, js, images),这种架构称为 反向代理

第一步:安装环境

安装 JDK

Tomcat 8/9/10 需要 JDK 8 或更高版本,我们推荐使用 OpenJDK。

对于 CentOS / RHEL / Fedora:

# 安装 OpenJDK 11 (这是一个稳定且广泛使用的版本)
sudo yum install java-11-openjdk-devel -y
# 验证安装
java -version
javac -version

对于 Ubuntu / Debian:

# 更新包列表
sudo apt update
# 安装 OpenJDK 11
sudo apt install openjdk-11-jdk -y
# 验证安装
java -version
javac -version

创建 Tomcat 专用用户

出于安全考虑,永远不要使用 root 用户来运行 Tomcat,我们创建一个专门的、没有登录权限的用户。

如何在服务器上正确配置Tomcat?-图2
(图片来源网络,侵删)
# 创建一个名为 'tomcat' 的用户和组
sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat tomcat

第二步:下载并安装 Tomcat

我们使用官方二进制包,这是最简单的方式。

  1. 下载 Tomcat 访问 Tomcat 官方下载页面,选择 "Core" 下的 "tar.gz" 链接,这里以 Tomcat 9 为例。

    # 进入临时目录
    cd /tmp
    # 下载 Tomcat 9 (请替换为最新版本号)
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
    # 解压
    tar -xzf apache-tomcat-9.0.85.tar.gz
  2. 移动并设置权限 将 Tomcat 安装到一个合适的目录,/opt

    # 创建 Tomcat 安装目录
    sudo mkdir -p /opt/tomcat
    # 移动解压后的目录到 /opt/tomcat
    sudo mv apache-tomcat-9.0.85 /opt/tomcat/
    # 将 tomcat 用户设置为目录的所有者
    sudo chown -R tomcat:tomcat /opt/tomcat/apache-tomcat-9.0.85
    # 给脚本文件添加执行权限
    sudo sh -c 'chmod +x /opt/tomcat/apache-tomcat-9.0.85/bin/*.sh'

第三步:配置 Tomcat

配置环境变量 (可选但推荐)

为了让系统在任何地方都能找到 Tomcat 的命令,可以配置 CATALINA_HOME

如何在服务器上正确配置Tomcat?-图3
(图片来源网络,侵删)
# 编辑 profile 文件
sudo vi /etc/profile.d/tomcat.sh
# 添加以下内容
export CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.85
export PATH=$PATH:$CATALINA_HOME/bin
# 保存后,让配置生效
source /etc/profile.d/tomcat.sh

修改 server.xml (核心配置文件)

server.xml 位于 $CATALINA_HOME/conf/ 目录下,是 Tomcat 最核心的配置文件。

sudo vi $CATALINA_HOME/conf/server.xml

主要关注以下几个部分:

  • 端口配置

    • <Connector port="8080" ... />: 这是 Tomcat 默认的监听端口,用于接收 HTTP 请求,你可以修改它,比如改为 8081,以避免与其他服务冲突。
    • <Connector port="8443" ... />: 这是 HTTPS 连接器,默认是关闭的(SSLEnabled="false"),如果你需要直接提供 HTTPS 服务,需要配置 SSL 证书并启用它。
    • <Server port="8005" ... />: 这是 Tomcat 的关闭端口,通过执行 ./shutdown.sh,实际上是向这个端口发送一个停止命令,确保这个端口不被防火墙拦截。
  • 部署你的应用 你可以将你的 .war 文件直接放到 $CATALINA_HOME/webapps/ 目录下,Tomcat 会自动部署它,或者,你可以在 server.xml<Host> 标签内手动配置一个虚拟主机。

    <!-- 在 <Host name="localhost" ...> 标签内添加 -->
    <Context docBase="/path/to/your/webapp" path="/myapp" reloadable="true" />
    • docBase: 你的应用 WAR 文件解压后的根目录,或者 WAR 文件本身路径。
    • path: 访问这个应用的 URL 路径,http://yourdomain.com:8080/myapp
    • reloadable="true: 开启热部署,开发时方便,但生产环境建议设为 false 以提升性能。

第四步:配置 Systemd 服务 (推荐)

为了方便地启动、停止、重启 Tomcat,并让它开机自启,我们将其配置为 Systemd 服务。

  1. 创建服务文件

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

    [Unit]
    Description=Apache Tomcat Web Application Container
    After=network.target
    [Service]
    Type=forking
    # 环境变量
    Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" # 你的 JDK 路径,用 `which java` 查看
    Environment="CATALINA_PID=/opt/tomcat/apache-tomcat-9.0.85/temp/tomcat.pid"
    Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.85"
    Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat-9.0.85"
    Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -XX:MaxMetaspaceSize=256M" # JVM 内存设置
    # 运行用户和执行命令
    User=tomcat
    Group=tomcat
    ExecStart=/opt/tomcat/apache-tomcat-9.0.85/bin/startup.sh
    ExecStop=/opt/tomcat/apache-tomcat-9.0.85/bin/shutdown.sh
    # 重启策略
    RestartSec=10
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
  3. 启动并启用服务

    # 重新加载 systemd 配置
    sudo systemctl daemon-reload
    # 启动 Tomcat
    sudo systemctl start tomcat
    # 检查状态
    sudo systemctl status tomcat
    # 设置开机自启
    sudo systemctl enable tomcat

你可以通过 http://<你的服务器IP>:8080 来访问 Tomcat 的默认页面了。


第五步:配置防火墙

确保防火墙允许 Tomcat 的端口(如 8080)被访问。

对于 CentOS / RHEL / Fedora (使用 firewalld):

# 添加永久规则,允许 8080 端口
sudo firewall-cmd --permanent --add-port=8080/tcp
# 重新加载防火墙
sudo firewall-cmd --reload

对于 Ubuntu / Debian (使用 ufw):

# 允许 8080 端口
sudo ufw allow 8080/tcp

第六步:配置 Nginx 反向代理 (强烈推荐)

这一步将让你的 Tomcat 更安全、更高效。

  1. 安装 Nginx

    # CentOS
    sudo yum install nginx -y
    # Ubuntu
    sudo apt install nginx -y
  2. 创建 Nginx 配置文件

    sudo vi /etc/nginx/conf.d/tomcat.conf
  3. server {
        listen 80;
        server_name your_domain.com; # 替换成你的域名或 IP
        location / {
            # 将所有请求转发给 Tomcat
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
        # 可选:静态资源由 Nginx 直接处理,提高速度
        # location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        #     root /path/to/your/webapp/static; # 你的静态资源路径
        #     expires 30d;
        # }
    }
  4. 测试并重启 Nginx

    # 测试 Nginx 配置文件语法
    sudo nginx -t
    # 如果测试通过,重启 Nginx
    sudo systemctl restart nginx
    sudo systemctl enable nginx

用户访问 http://your_domain.com 时,实际上是 Nginx 在背后为他们服务,并将请求转发到本地的 Tomcat (8080端口),你的 Tomcat 端口不再直接暴露在公网上,安全性大大提高。


第七步:安全优化

  1. 修改默认管理端口 (8005) 编辑 $CATALINA_HOME/conf/server.xml,修改 Server 标签的 port 属性为一个不常用的端口,并确保防火墙规则也相应更新。

  2. 删除默认应用和示例 为了减少攻击面,删除或重命名 $CATALINA_HOME/webapps/ 目录下的 docs, examples, host-manager, manager 等目录。

  3. 配置管理员账户 编辑 $CATALINA_HOME/conf/tomcat-users.xml,删除默认的注释用户,并为你自己创建一个具有 manager-gui, admin-gui 角色的管理员账户。

    <tomcat-users xmlns="http://tomcat.apache.org/xml.tomcat-users-config"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://tomcat.apache.org/xml.tomcat-users-config
                  http://tomcat.apache.org/xml.tomcat-users-config.xsd">
      <role rolename="manager-gui"/>
      <role rolename="admin-gui"/>
      <user username="your_admin_user" password="your_strong_password" roles="manager-gui,admin-gui"/>
    </tomcat-users>

    注意: 如果使用了 Nginx 反向代理,你可能需要修改 $CATALINA_HOME/webapps/manager/META-INF/context.xml,允许来自 Nginx 代理 IP 的访问。

  4. 设置 JVM 内存tomcat.service 文件中,我们已经通过 CATALINA_OPTS 设置了 JVM 的初始和最大堆内存 (-Xms, -Xmx),你需要根据服务器的实际内存来调整这些值,一个常见的经验法则是,将最大堆内存设置为服务器物理内存的 50%-75%。


总结与检查清单

  1. [ ] 安装 JDK 并验证 java -version
  2. [ ] 创建 tomcat 用户
  3. [ ] 下载并解压 Tomcat 到 /opt 目录。
  4. [ ] 设置目录权限,所有者为 tomcat 用户。
  5. [ ] 配置 server.xml,修改端口(可选)和部署应用。
  6. [ ] 创建 tomcat.service Systemd 服务,并设置为开机自启。
  7. [ ] 启动 Tomcat,并检查状态 systemctl status tomcat
  8. [ ] 配置防火墙,允许 Tomcat 端口(如 8080)。
  9. [ ] 访问 http://IP:8080,确认 Tomcat 默认页面可以打开。
  10. [ ] (推荐) 安装并配置 Nginx 作为反向代理。
  11. [ ] (推荐) 进行安全优化:修改管理端口、删除默认应用、设置强密码、调整 JVM 内存。

至此,你的 Tomcat 服务器已经配置完成,并且具备了生产环境所需的基本安全性和性能。

分享:
扫描分享到社交APP
上一篇
下一篇